因此,我刚刚更新到Xcode 8,并将我的Swift 2.3代码转换为Swift 3,在这一行代码中出现了一个错误,而不是在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()
}
}现在问题是在线let person:ABRecord = Unmanaged<ABRecord>.fromOpaque(OpaquePointer(CFArrayGetValueAtIndex(allPeople, index))).takeUnretainedValue()
Xcode告诉我'fromOpaque' is unavailable: use 'fromOpaque(_:UnsafeRawPointer)' instead。但是我找不到Xcode告诉我要使用的函数,我只需要找到我目前正在使用的fromOpaque(value: UnsafeRawPointer)。
我怎么才能把这事做好?
发布于 2016-09-19 20:58:33
您可以简化这一点,消除所有这些不透明的指针引用,例如:
func populate(from addressBook: ABAddressBook) {
let allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as [ABRecord]
for person in allPeople {
let name = ABRecordCopyCompositeName(person).takeRetainedValue()
print(name)
}
}或者,考虑到AddressBook框架在iOS 9中被废弃,您可以使用联系人框架:
let store = CNContactStore()
store.requestAccess(for: .contacts) { granted, error in
guard granted else {
print(error)
return
}
self.populate(from: store)
}和
func populate(from store: CNContactStore) {
let formatter = CNContactFormatter()
formatter.style = .fullName
let request = CNContactFetchRequest(keysToFetch: [CNContactFormatter.descriptorForRequiredKeys(for: formatter.style)])
do {
try store.enumerateContacts(with: request) { contact, stop in
print(formatter.string(from: contact))
}
} catch {
print(error)
}
}https://stackoverflow.com/questions/39581687
复制相似问题