Swift2 正在尝试在swift 2中使用takeUnretainedValue()

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

这是我在swift 1.2中的代码

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()
。你能编辑你的答案吗,这样我就可以把它标记为正确的答案当然,很乐意这样做(如果我能记住这是怎么回事:)