在尝试集成 Address Book 框架并将 CF 类型转换为 NS 类再转换为 Swift 类时,我注意到了一些奇怪的事情:
ABRecordCopyCompositeName(record)?.takeRetainedValue() as? NSString
trở lại không
ABRecordCopyCompositeName(record)?.takeRetainedValue() as NSString?
trở lại Optional("John Smith")
我的问题是这不是吗? NSString
Và 同义 as NSString?作为? NSString
? (如果是,为什么不呢?)
Vì vậy,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()
trở lại Unmanaged!
Và ABRecordCopyCompositeName()
trở lại Unmanaged!
,这两种类型都是未包装的可选类型,所以在调用 takeRetainedValue()
之后你可以桥接到NSString
ABRecordCopyCompositeName(record).takeRetainedValue() as NSString
或进一步Sợi dây
ABRecordCopyCompositeName(record).takeRetainedValue() as NSString as String
Tôi là một lập trình viên xuất sắc, rất giỏi!