Swift2 正在尝试在swift 2中使用takeUnretainedValue()
这是我在swift 1.2中的代码Swift2 正在尝试在swift 2中使用takeUnretainedValue(),swift2,Swift2,这是我在swift 1.2中的代码 let record = attendee.ABRecordWithAddressBook(addressBookController.adbk)! let unmanagedValue = ABRecordCopyValue(record.takeUnretainedValue(), kABPersonEmailProperty) 我现在收到一条错误消息 Value of type 'ABrecord' has no member 'takeUnretai
let record = attendee.ABRecordWithAddressBook(addressBookController.adbk)!
let unmanagedValue = ABRecordCopyValue(record.takeUnretainedValue(), kABPersonEmailProperty)
我现在收到一条错误消息
Value of type 'ABrecord' has no member 'takeUnretainedValue'
那么还有什么办法呢?错误信息非常清楚。您不能对
ABRecord?
说takeUnretainedValue
声明如下:
ABRecordWithAddressBook(_ addressBook: ABAddressBook) -> ABRecord?
所以这会产生一个可选的。你得把它打开。这可能会奏效:
if let record = attendee.ABRecordWithAddressBook(addressBookController.adbk) {
let unmanagedValue = ABRecordCopyValue(record.takeUnretainedValue(), kABPersonEmailProperty)
}
但我想你会遇到新问题;现在您拥有了实际的ABRecord,完全具有内存管理功能。因此,您还应该剪切takeUnretainedValue()
,保留以下内容:
if let record = attendee.ABRecordWithAddressBook(addressBookController.adbk) {
let unmanagedValue = ABRecordCopyValue(record, kABPersonEmailProperty)
}
实际上,我在线路上也遇到了类似的问题:
let retrievedData : NSData = dataTypeRef!.takeRetainedValue() as! NSData
在我删除.takeRetainedValue()后编译的
可能是因为dataTypeRef!已经打开包装了 所以现在只需剪切
.takeUnretainedValue()
。你能编辑你的答案吗,这样我就可以把它标记为正确的答案当然,很乐意这样做(如果我能记住这是怎么回事:)