使用CF的Swift铸造声明 - > NS课程

时间:2015-08-19 16:41:23

标签: ios swift

在尝试集成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功能。)

1 个答案:

答案 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