我試圖用swift獲取具有特定名稱的聯繫人列表。我有以下代碼:Swift等效於(__bridge NSArray *)
let owner = owners[indexPath.row];
var addressBook = ABAddressBookCreateWithOptions(nil, nil)
var addressBookRef: ABAddressBookRef = Unmanaged<NSObject>.fromOpaque(addressBook.toOpaque()).takeUnretainedValue()
let ownerName: NSString = owner["name"]! as NSString
let allContacts = ABAddressBookCopyPeopleWithName(addressBookRef, ownerName)
println("All Contacts: \(allContacts)")
顯然,allContacts
擁有的Swift.Unmanaged
值。我期望allContacts
是一個NSArray
。
在本教程中,我遵循allContacts
橋接到NSArray
通過添加(__bridge NSArray*)
到ABAddressBookCopyPeopleWithName(addressBookRef, ownerName)
。
什麼可能導致此問題?
你可能想分享一個鏈接到這個教程,因爲通常你會使用'(__bridge_transfer NSArray *)'(或'CFBridgingRelease()')將所有權轉讓給ARC。讓生活變得更容易。如果你使用了'(__bridge NSArray *)',那麼你必須手動'CFRelease'到'CFArrayRef'。無論如何,'__bridge'相當於'.takeUnretainedValue()','__bridge_transfer'相當於'.takeRetainedValue()'。僅供參考,不再需要'fromOpaque' /'toOpaque'舞蹈。 – Rob 2014-09-05 02:12:49