在 Swift 中使用带有 UnsafeMutableRawPointer 或 UnsafeMutablePointer 参数的 ObjC 函数?
Posted
技术标签:
【中文标题】在 Swift 中使用带有 UnsafeMutableRawPointer 或 UnsafeMutablePointer 参数的 ObjC 函数?【英文标题】:Working with ObjC Functions with UnsafeMutableRawPointer or UnsafeMutablePointer Parameter from Swift? 【发布时间】: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。 非常感谢!
【问题讨论】:
我已经为 Swift 3 更新了***.com/questions/25124002/…,这有帮助吗? @Martin R - 这完全有效!如果您将其发布为答案,我可以接受。非常感谢! @Martin R - 你可能也知道这个问题的答案。你介意看看吗?这与此有关:使用 ObjC 函数从 CFTypeRef 获取 Swift String...***.com/questions/40784738 【参考方案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 ...
【讨论】:
以上是关于在 Swift 中使用带有 UnsafeMutableRawPointer 或 UnsafeMutablePointer 参数的 ObjC 函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift中使用带有completionHandler的UIImageView load()函数
如何在 Swift 3 中使用带有代理的 URLSession