Как показать несколько телефонных номеров, если они существуют в CNContactPickerViewController

#ios #swift #cncontact #cncontactstore #cncontactpicker

#iOS #swift #cncontact #cncontactstore #cncontactpicker

Вопрос:

в моем приложении я использую 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")
    }
  

Однако некоторые пользователи жалуются на невозможность увидеть и выбрать, имеет ли контакт более одного телефонного номера. Можно ли показывать контакты с несколькими номерами?

Ответ №1:

Вы используете только первый номер телефона контакта:

 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)
}
  

Комментарии:

1. Я уже думал добавить несколько телефонных номеров, если они существуют, но я хотел бы показать пользователю при выборе в списке.