gpt4 book ai didi

ios - 使用 CF -> NS 类的 Swift casting 语句

转载 作者:行者123 更新时间:2023-11-29 01:44:13 26 4
gpt4 key购买 nike

在尝试集成 Address Book 框架并将 CF 类型转换为 NS 类再转换为 Swift 类时,我注意到了一些奇怪的事情:

ABRecordCopyCompositeName(record)?.takeRetainedValue() as? NSString

返回 nil

ABRecordCopyCompositeName(record)?.takeRetainedValue() as NSString?

返回 Optional("John Smith")

我的问题是这不是吗? NSString 同义 as NSString?作为? NSString? (如果是,为什么不呢?)

因此,ABRecordCopyCompositeName(record)?.takeRetainedValue() as? NSString应该相当于ABRecordCopyCompositeName(record)?.takeRetainedValue() as NSString?作为? NSString这应该返回“John Smith”。

(这适用于 iOS 8.3,但 iOS 8.4 破坏了我的地址簿功能。)

最佳答案

as (NS)String?没有受支持的语法,即使它可能以某种方式工作。
您可以强制 ( as! ) 或可选 ( as? ) 或者您可以桥接 ( as ) 并且类型后没有感叹号/问号。

ABAddressBookCopyArrayOfAllPeople()返回 Unmanaged<CFArray>!ABRecordCopyCompositeName()返回 Unmanaged<CFString>! ,这两种类型都是未包装的可选类型,所以在调用 takeRetainedValue() 之后你可以桥接到NSString

ABRecordCopyCompositeName(record).takeRetainedValue() as NSString

或进一步String

ABRecordCopyCompositeName(record).takeRetainedValue() as NSString as String

关于ios - 使用 CF -> NS 类的 Swift casting 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32101177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com