使用带有UnsafeMutableRawPointer或UnsafeMutablePointer的ObjC函数Swift中的参数?
问题描述:
我是新来的swift,我试图使用具有参数类型UnsafeMutablePointer的ObjC函数。我阅读了很多关于使用UnsafeMutablePointer或UnsafeMutableRawPointer的文章,但是我仍然无法使它工作。函数是:
func AXUIElementCopyAttributeNames(_ element:AXUIElement,_ names:UnsafeMutablePointer) - > AXError
我甚至发现确切函数的问题,但答案似乎在swift 3中不再有效。下面是一些我试过的东西没有用。使用带有UnsafeMutableRawPointer或UnsafeMutablePointer的ObjC函数Swift中的参数?
var ptr : Unmanaged<CFArray>? = nil
AXUIElementCopyAttributeNames(element, &ptr)
var names:CFArray? = nil
AXUIElementCopyAttributeNames(element, UnsafeMutablePointer(names))
var names:CFArray? = nil
AXUIElementCopyAttributeNames(element, UnsafeMutablePointer<CFArray>(Unmanaged.passUnretained(names).toOpaque()))
另外,有没有一个很好的教程,可以让我很好地掌握在Swift 3中使用ObjC函数?看起来还有很多apis在迅速失踪。
非常感谢!
答
AXUIElementCopyAttributeNames
并不需要一个指针 的非托管CFArray
了:
let element: AXUIElement = ...
var cfArray: CFArray?
let error = AXUIElementCopyAttributeNames(element, &cfArray)
if error == .success, let names = cfArray as? [String] {
// names is [String] array ...
}
我已经更新http://*.com/questions/25124002/how-to-handle-unsafepointerunmanagedcfarray的斯威夫特3 ,这有帮助吗? –
@Martin R - 完全工作!如果你把它作为答案发布,我可以接受它。非常感谢! – jl303
@Martin R - 你也许也知道这个答案。你介意看吗?这与此相关:从CFTypeRef获取Swift字符串与ObjC函数... http://*.com/questions/40784738/ – jl303