CNContactPickerViewController 仅检索选定的项目

CNContactPickerViewController Retrieve ONLY Selected Item

委托方法实现时:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty)

用户可以select 列表中的联系人,然后会自动显示联系人详细信息。 select 从联系人指定的字段中,CNContactPickerViewController 消失。

问题是,如果有两个 phone 号码,并且用户明确 select 其中一个号码,则返回的 CNContactProperty 包括两个 phone 号码.

如何只提取用户点击的号码?

示例代码:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    contactProperty.contact.phoneNumbers //the numbers are an array so I am not able to see which one the user selected
}

您的问题是您忽略了所选 属性。您正在直接访问联系人的所有 phone 号码。使用 contactProperty 参数,它只选择了一个 属性.

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    // See if the user selected a phone number
    if let phone = contactProperty.value as? CNPhoneNumber {
        let number = phone.stringValue
    }
}

如果您只想处理选定的 phone 数字,以上内容很好。如果你想处理几种不同的 属性 类型,像下面这样的东西可能更好:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    switch contactProperty.key {
    case CNContactPhoneNumbersKey:
        if let phone = contactProperty.value as? CNPhoneNumber {
            let number = phone.stringValue
            // do something
        }
    // case ...: // some other type
    default:
        break
    }
}