Swift3 Swift 3中ContactUI的多项选择

Swift3 Swift 3中ContactUI的多项选择,swift3,contacts,ios10.3,Swift3,Contacts,Ios10.3,我对用Swift编码很不熟悉,并尝试自学。我很难理解如何在Swift 3中启用ContactPicker视图UI中的多项选择 通过阅读文档,似乎要启用多重选择,我应该使用[CNContactProperty],但这是不明确的。当我这样做时,我无法调用属性来打印givenName和值,因为它们不是数组的成员。另外,当我使用[CNContactProperty]语法时,我的选择器视图没有显示结束选择的“完成”按钮。取消是我离开选取器视图的唯一选项 我已经找到了许多关于以前版本Swift的答案,但我对

我对用Swift编码很不熟悉,并尝试自学。我很难理解如何在Swift 3中启用ContactPicker视图UI中的多项选择

通过阅读文档,似乎要启用多重选择,我应该使用
[CNContactProperty]
,但这是不明确的。当我这样做时,我无法调用属性来打印givenName和值,因为它们不是数组的成员。另外,当我使用
[CNContactProperty]
语法时,我的选择器视图没有显示结束选择的“完成”按钮。取消是我离开选取器视图的唯一选项

我已经找到了许多关于以前版本Swift的答案,但我对如何在Swift 3中使用此功能感兴趣。最后,我尝试在
UIMessageComposer
中预先填充联系人字段,以便只需按一下发送按钮,即可从一个数组向多个联系人发送消息

// this is the code that works for a single selection
import UIKit
import ContactsUI
import Contacts

class MainViewController: UIViewController, CNContactPickerDelegate {

// select Contacts to message from "Set Up" Page
@IBAction func pickContacts(_ sender: Any) {

    let contactPicker = CNContactPickerViewController()

    contactPicker.delegate = self
    contactPicker.displayedPropertyKeys = [CNContactPhoneNumbersKey]

    self.present(contactPicker, animated: true, completion: nil)

}

//allow contact selection and dismiss pickerView
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactsProperty: CNContactProperty) {
    let contact = contactsProperty.contact
    let phoneNumber = contactsProperty.value as! CNPhoneNumber

    print(contact.givenName)
    print(phoneNumber.stringValue)

}

在您的
CNContactPickerDelegate
实现中,您实现了:

contactPicker(_ picker: CNContactPickerViewController, didSelect contactsProperty: CNContactProperty) 
在选择特定属性时调用。但如果要选择多个联系人,则需要实现:

contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact])
返回选定联系人的数组。因此,您的委托实现方法可能如下所示:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {
    for contact in contacts {
        let phoneNumber = contact.value(forKey:CNContactPhoneNumbersKey)
        print(contact.givenName)
        print(phoneNumber)
    }
}

当然,
phoneNumber
变量将包含一个电话号码数组,您需要在数组中循环以获得特定的号码。

谢谢,先生,您是一个救生员。“print(phoneNumber)”命令仍然给了我一个长字符串,所以我做了一个小改动。还是感谢不了你//我对以短字符串形式获取电话号码所做的更改///let phoneNumber=(contact.phoneNumbers[0].value).value(forKey:“digits”)!很乐意帮助:)如果以上答案有用,请不要忘记投票并将其标记为“正确”。