【问题标题】:Working with ObjC Functions with UnsafeMutableRawPointer or UnsafeMutablePointer Parameter from Swift?在 Swift 中使用带有 UnsafeMutableRawPointer 或 UnsafeMutablePointer 参数的 ObjC 函数?
【发布时间】:2016-11-24 07:22:48
【问题描述】:

我是 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。
非常感谢!

【问题讨论】:

标签: objective-c swift swift3


【解决方案1】:

AXUIElementCopyAttributeNames 没有指向 unmanaged CFArray 了:

let element: AXUIElement = ...

var cfArray: CFArray?
let error = AXUIElementCopyAttributeNames(element, &cfArray)
if error == .success, let names = cfArray as? [String] {
    // names is [String] array ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多