swift - 如何将 Unmanaged<CFTypeRef> 转换为 Swift 3

标签 swift pointers unmanaged

如何从 Swift 2.3 覆盖此函数到 Swift 3

 let unmanagedPhones = ABRecordCopyValue(person, kABPersonPhoneProperty)

 let phones: ABMultiValue = Unmanaged.fromOpaque(unmanagedPhones.toOpaque()).takeUnretainedValue() as NSObject as ABMultiValue

编译器说:'Unmanaged<CFTypeRef>?' has no member 'toOpaque'

请帮助我

最佳答案

AddressBook framework is deprecated as of iOS9, and at any time Apple would say: "AddressBook is actually removed from iOS 10.x". You better get ready for Contacts framework soon.

您使用的代码过于冗余,以至于某些部分即使在 Swift2 中也不需要。

检索T来自 Unmanaged<T>? 的对象,您只需调用 takeRetainedValue()takeUnretainedValue()立即。

let phones: ABMultiValue? = unmanagedPhones?.takeRetainedValue()
  • 您应该使用takeRetainedValue()对于 Copy 的结果- 规则函数。
  • ABMultiValue是 Swift3 中 CFTypeRef 的类型别名,因此您无需转换结果。
  • 关心零安全编码,如 Unmanaged<T>?可能为零。

关于swift - 如何将 Unmanaged<CFTypeRef> 转换为 Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38510196/

相关文章:

ios - 未调用 ContentBlockerRequestHandler 类?

ios - 如何在 Swift playground 中停止帧的大小变为 1024x768

swift - 使用转义闭包值

pointers - uint8_t* 与 uint8_t 之间的区别

c# - 从 C 获取字节数组到 C#

c++ - .idl 导入接口(interface)中的 coclass 在别处定义?

swift - YPDrawSignatureView - 绘制签名时表格滚动

pointers - 在 Golang 中使用指针的问题

c++ - 我正在尝试使用指针对数组进行排序

java - 为什么不能在 Closeable 类上自动调用 close()?