ABAddressBook fromOpaque (_ :) en Swift 3

Así que acabo de actualizar a Xcode 8 y convertir mi código Swift 2.3 a Swift 3, y tengo un error en esta línea de código que no estaba en Swift 2.3:

func populateFrom(_ addressBook:ABAddressBook) { let allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() let nPeople = ABAddressBookGetPersonCount(addressBook) for index in 0..<nPeople { let person:ABRecord = Unmanaged<ABRecord>.fromOpaque(OpaquePointer(CFArrayGetValueAtIndex(allPeople, index))).takeUnretainedValue() } } 

Ahora el problema está en la línea let person:ABRecord = Unmanaged<ABRecord>.fromOpaque(OpaquePointer(CFArrayGetValueAtIndex(allPeople, index))).takeUnretainedValue()

Xcode me dice que 'fromOpaque' is unavailable: use 'fromOpaque(_:UnsafeRawPointer)' instead . Pero no puedo encontrar esa function que Xcode me está fromOpaque(value: UnsafeRawPointer) que use, solo puedo encontrar fromOpaque(value: UnsafeRawPointer) que es el que estoy usando actualmente.

¿Cómo puedo hacer que esto funcione?

Puede simplificar esto un poco, eliminando todas esas references de puntero opaco, por ejemplo:

 func populate(from addressBook: ABAddressBook) { let allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as [ABRecord] for person in allPeople { let name = ABRecordCopyCompositeName(person).takeRetainedValue() print(name) } } 

O, dado que el marco de la libreta de direcciones estaba en desuso en iOS 9, puede usar el marco de contactos:

 let store = CNContactStore() store.requestAccess(for: .contacts) { granted, error in guard granted else { print(error) return } self.populate(from: store) } 

Y

 func populate(from store: CNContactStore) { let formatter = CNContactFormatter() formatter.style = .fullName let request = CNContactFetchRequest(keysToFetch: [CNContactFormatter.descriptorForRequinetworkingKeys(for: formatter.style)]) do { try store.enumerateContacts(with: request) { contact, stop in print(formatter.string(from: contact)) } } catch { print(error) } }