使用来自Swift的UnsafeMutableRawPointer或UnsafeMutablePointer参数的ObjC函数?

时间:2016-11-24 07:22:49

标签: objective-c swift swift3

我是swift的新手,我正在尝试使用具有参数类型UnsafeMutablePointer的ObjC函数。我阅读了很多关于使用UnsafeMutablePointer或UnsafeMutableRawPointer的帖子,但我仍然无法让它工作。功能是:
func AXUIElementCopyAttributeNames(_ element:AXUIElement,_ names:UnsafeMutablePointer) - > AXError
我甚至找到了确切功能的问题,但答案似乎在swift 3中不再起作用。以下是我尝试过的一些不起作用的事情。

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函数?似乎在swift中仍然缺少许多api 非常感谢你!

1 个答案:

答案 0 :(得分: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 ...
}