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

How to convert Unmanaged<CFTypeRef> to Swift 3

如何将此功能从 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 中也不需要。

要从 Unmanaged<T>? 检索 T 对象,您只需立即调用 takeRetainedValue()takeUnretainedValue()

let phones: ABMultiValue? = unmanagedPhones?.takeRetainedValue()
  • 您应该使用 takeRetainedValue() 作为 Copy 规则函数的结果。
  • ABMultiValue 是 Swift3 中 CFTypeRef 的类型别名,所以你不需要转换结果。
  • 关心 nil 安全编码,因为 Unmanaged<T>? 可能是 nil。