显示具有独立名称对的联系人

时间:2019-02-01 11:02:31

标签: ios swift

我正在访问我的应用程序中的联系人。联系人显示正确,但以格式显示

-> Aditya

-> Ankur

-> Bhavya

-> Shubham

当我单击任何名称时,它都会使我与完整的联系人CNContact

问题在于任何名称都有两个与之关联的数字。

  

我希望它显示为

-> Aditya - mob number 1

-> Ankur - mob number 1

-> Bhavya - mob number 1

-> Bhavya - mob number 2

-> Shubham - mob number 1

以这种格式显示每个数字,我们可以自由选择

当前我正在使用代码

func openContactPicker() {
        let contactPicker = CNContactPickerViewController()
            contactPicker.delegate = self
            contactPicker.displayedPropertyKeys = [CNContactGivenNameKey, CNContactPhoneNumbersKey]
        self.present(contactPicker, animated: true, completion: nil)
    }

extension ViewController : CNContactPickerDelegate {
    func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
        picker.dismiss(animated: true, completion: nil)
        print("Contact: \(contact)")
    }
}

我知道我可以通过创建一个新的View并对其进行设计来做到这一点。但是我们可以借助可用的框架吗?

1 个答案:

答案 0 :(得分:1)

在StackOverflow上没有讨论框架/库或SDK的问题。

您应该遍历给定的联系人,如果有多个联系人使用多个电话号码,请为其创建另一个记录。

您可以为您的结果建立模型,例如

struct ContactModel {
    let name: String
    let number: String
}

将所有响应转换为该响应并将其存储在contact: [ContactModel]数组中。

然后遍历您的CNContacts并创建模型

let cnContacts = [CNContact]()
var contacts = [ContactModel]()

cnContacts.forEach {
    let name = "\($0.givenName) \($0.familyName)"
    for number in $0.phoneNumbers {
        contacts.append(ContactModel(name: name, number: number.value.stringValue))
    }
}

注意:代码是在此处编写的,并且未在XCode中进行测试,因此可能需要进行一些调整,但是这种方法应该可以。