Swift 当联系人有多封邮件时,CNContactPickerViewController

Swift 当联系人有多封邮件时,CNContactPickerViewController,swift,cncontactpicker,Swift,Cncontactpicker,我正在使用CNContactPickerViewController让用户选择他/她的一个联系人的电子邮件 let contactPicker = CNContactPickerViewController() contactPicker.delegate = self contactPicker.predicateForSelectionOfContact = NSPredicate(format: "emailAddresses.@count > 0") contactPicker.d

我正在使用CNContactPickerViewController让用户选择他/她的一个联系人的电子邮件

let contactPicker = CNContactPickerViewController()
contactPicker.delegate = self
contactPicker.predicateForSelectionOfContact = NSPredicate(format: "emailAddresses.@count > 0")
contactPicker.displayedPropertyKeys = [CNContactNicknameKey, CNContactEmailAddressesKey]
当联系人只有一封邮件时,一切都很顺利

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {

    if let _mail = contact.emailAddresses.first?.value as String? {
        self.personWasSelected(with: _mail)
    }
}

但有时其中一个联系人有多封邮件,如何让用户选择其中一封?

好的,通过尝试错误找到解决方案

我正在实施以下两项:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    if let _mail = contactProperty.value as? String {
        self.personWasSelected(with: _mail)
    }
}

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {

    if let _mail = contact.emailAddresses.first?.value as String? {
        self.personWasSelected(with: _mail)
    }
}

但是只有第一个应该被实现

让用户选择要选择的电子邮件地址,设置

picker.predicateForEnablingContact = NSPredicate(format: "emailAddresses.@count > 0")
picker.predicateForSelectionOfContact = NSPredicate(format: "emailAddresses.@count == 1")
这样,对于只有一封电子邮件的用户

contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact)
调用,但对于具有多封电子邮件的用户,将显示联系人详细信息,并将所选电子邮件传递给

contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)
请注意,
CNContactProperty
还具有
.contact
属性