【问题标题】:How to convert Unmanaged<CFTypeRef> to Swift 3如何将 Unmanaged<CFTypeRef> 转换为 Swift 3
【发布时间】:2016-11-25 09:33:27
【问题描述】:

如何从 Swift 2.3 覆盖这个函数到 Swift 3

 let unmanagedPhones = ABRecordCopyValue(person, kABPersonPhoneProperty)

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

编译器说:'Unmanaged&lt;CFTypeRef&gt;?' has no member 'toOpaque'

请帮帮我

【问题讨论】:

    标签: swift pointers unmanaged


    【解决方案1】:

    AddressBook 框架自 iOS9 起已弃用,Apple 在任何时候都已弃用 会说:“AddressBook 实际上已从 iOS 10.x 中删除”。你最好 尽快为联系人框架做好准备。

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

    要从Unmanaged&lt;T&gt;? 中检索T 对象,您只需立即调用takeRetainedValue()takeUnretainedValue()

    let phones: ABMultiValue? = unmanagedPhones?.takeRetainedValue()
    
    • 您应该使用takeRetainedValue() 作为Copy 规则函数的结果。
    • ABMultiValue 是 Swift3 中 CFTypeRef 的类型别名,因此您无需转换结果。
    • 注意零安全编码,因为Unmanaged&lt;T&gt;? 可能为零。

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 2015-10-28
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      相关资源
      最近更新 更多