如何在Swift中获取联系人的全名

16

现在我正在使用这段代码从我的手机中获取联系人:

 var addressBookReff: ABAddressBookRef = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()
    let people:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBookReff).takeRetainedValue()
    for person in people{
        if  let name:String = ABRecordCopyValue(person, kABPersonFirstNameProperty)?.takeRetainedValue() as? String {
            let numbers:ABMultiValue = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue()
            if let number:String = ABMultiValueCopyValueAtIndex(numbers,0)?.takeRetainedValue() as? String {
                self.arrOfDictContacts.addObject(["\(name)":"\(number)"])
            }
        }
    }

在这里,我正在使用 kABPersonFirstNameProperty 来获取仅名字。 我想要获取联系人的全名!!! 如果我使用 kABPersonCompositeNameFormatFirstNameFirst,那么我会收到错误消息,如Int is not convertible to ABPropertyId。如果这个问题很简单并且有许多答案,请原谅我,因为我找不到适合我的任何一个,因为我不想调用额外的函数。所以我如何获取全名并将其添加到字典arrOfDictContacts中?
1个回答

40
在AddressBook API中,您可以使用以下代码获取完整/组合名称:
let name = ABRecordCopyCompositeName(person).takeRetainedValue()
在联系人API中(适用于iOS 9+),您可以使用以下代码:
let name: String? = CNContactFormatter.string(from: contact, style: .fullName)

这里的 record 是什么? - AAA
1
升级到Swift 3:let name = CNContactFormatter.string(from: contact, style: .fullName) - B Roy Dawson
你还需要在 CNContactFetchRequest 的 keys 中添加 CNContactFormatter.descriptorForRequiredKeys(for: .fullName) as CNKeyDescriptor,否则应用程序会崩溃。 - ZAFAR007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接