2016-11-24 71 views
0

我是新来的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在迅速失踪。
非常感谢!

+0

我已经更新http://stackoverflow.com/questions/25124002/how-to-handle-unsafepointerunmanagedcfarray的斯威夫特3 ,这有帮助吗? –

+0

@Martin R - 完全工作!如果你把它作为答案发布,我可以接受它。非常感谢! – jl303

+0

@Martin R - 你也许也知道这个答案。你介意看吗?这与此相关:从CFTypeRef获取Swift字符串与ObjC函数... http://stackoverflow.com/questions/40784738/ – jl303

回答

0

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 ... 
} 
相关问题