2015-09-17 31 views
4

那是我在SWIFT 1.2嘗試使用takeUnretainedValue()在SWIFT 2

let record = attendee.ABRecordWithAddressBook(addressBookController.adbk)! 
let unmanagedValue = ABRecordCopyValue(record.takeUnretainedValue(), kABPersonEmailProperty) 

代碼我得到一個錯誤的消息現在

Value of type 'ABrecord' has no member 'takeUnretainedValue' 

有什麼替代呢?

回答

1

錯誤信息非常清楚。你不能說takeUnretainedValueABRecord?

這裏的聲明:

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) 
} 
+0

沒有工作,我編輯了這個問題。 – bubakazouba

+1

所以現在只需切割'.​​takeUnretainedValue()'。 – matt

+0

你可以編輯你的答案,所以我可以把它標記爲正確的 – bubakazouba

2

其實我也有類似的問題,該行:

let retrievedData : NSData = dataTypeRef!.takeRetainedValue() as! NSData 

後,我簡單地刪除.takeRetainedValue()的編譯。

可能是因爲dataTypeRef!已經打開了。