在尝试集成Address Book框架并将CF类型转换为NS Classes到Swift类时,我注意到一些奇怪的事情:
Phone
返回ABRecordCopyCompositeName(record)?.takeRetainedValue() as? NSString
nil
返回ABRecordCopyCompositeName(record)?.takeRetainedValue() as NSString?
我的问题是,Optional("John Smith")
不是as? NSString
的同义词吗? (如果是这样,为什么不呢?)
因此,
as NSString? as? NSString
应该相当于
ABRecordCopyCompositeName(record)?.takeRetainedValue() as? NSString
应该返回" John Smith"。
(这适用于iOS 8.3,但iOS 8.4破坏了我的AddressBook功能。)
答案 0 :(得分:1)
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