如果CNContactPickerViewController中存在电话号码,如何显示多个电话号码

问题描述

在我的应用中,我正在使用CNContactPickerViewController获取联系人。用户可以选择多个联系人,因此我实现了以下委托方法

 func contactPicker(_ picker: CNContactPickerViewController,didSelect contacts: [CNContact]) {
        var tempContacts = [Contact]()
        contacts.forEach { (contact) in
            if let phoneNumber = contact.phoneNumbers.first {
                let contact = Contact(name: "\(contact.givenname) \(contact.familyName)",phoneNumber: "\(phoneNumber.value.stringValue)")
                tempContacts.append(contact)
            }
        }
        selectedContacts = tempContacts
        _ = Contact.save(contacts: selectedContacts)
    }
    func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
        print("Cancel contact picker")
    }

但是,某些用户抱怨无法查看和选择联系人是否具有多个电话号码。可以显示具有多个号码的联系人吗?

解决方法

您仅使用联系人的第一个电话号码:

if let phoneNumber = contact.phoneNumbers.first {
    let contact = Contact(name: "\(contact.givenName) \(contact.familyName)",phoneNumber: "\(phoneNumber.value.stringValue)")
    tempContacts.append(contact)
}

如果使用map方法将所有电话号码映射到联系人数组,该怎么办:

func contactPicker(_ picker: CNContactPickerViewController,didSelect contacts: [CNContact]) {
    var tempContacts = [Contact]()
    contacts.forEach { (contact) in
        let contactPhoneNumbers = contact.phoneNumbers.map { Contact(name: "\($0.givenName) \($0.familyName)",phoneNumber: "\($0.value.stringValue)") }
        tempContacts.append(contentsOf: contactPhoneNumbers)
    }
    selectedContacts = tempContacts
    _ = Contact.save(contacts: selectedContacts)
}