如何将 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。
如何将此功能从 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。