匹配CNcontact和Digits Find Friends Swift 3

Matching CNcontact and Digits Find Friends Swift 3

我正在尝试构建 iPhone 带有数字的应用程序 查找朋友功能

我可以从 Digits 中获取匹配列表 digitUserID

现在我正在努力匹配 UserIDCNContacts

请指出任何例子来处理这个问题。

作为更新:

do 
{
    try contactStore.enumerateContactsWithFetchRequest(CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactMiddleNameKey, CNContactEmailAddressesKey,CNContactPhoneNumbersKey])) {
        (contact, cursor) -> Void in

        self.results.append(contact)
    }
}
catch{
    print("Handle the error please")
}

以上我已经设法获得所有联系人,但我不知道如何将 phone 号码过滤器传递给它并获得与 CNContact

的精确联系人匹配

理想情况下,人们会期望 CNContactFetchRequest 中的 predicate 来完成这项工作,但那(仍然;啊)只接受用 CNContact 定义的一小部分谓词(例如 CNContact predicateForContacts(matchingName:)predicateForContacts(withIdentifiers:)。它甚至不接受基于块的 NSPredicate

所以,你必须通过枚举,自己寻找匹配项,例如

let request = CNContactFetchRequest(keysToFetch: [
    CNContactGivenNameKey as CNKeyDescriptor,
    CNContactFamilyNameKey as CNKeyDescriptor,
    CNContactMiddleNameKey as CNKeyDescriptor,
    CNContactEmailAddressesKey as CNKeyDescriptor,
    CNContactPhoneNumbersKey as CNKeyDescriptor
])

do {
    try contactStore.enumerateContacts(with: request) { contact, stop in
        for phone in contact.phoneNumbers {
            // look at `phone.value.stringValue`, e.g.

            let phoneNumberDigits = String(phone.value.stringValue.characters.filter { String([=10=]).rangeOfCharacter(from: CharacterSet.decimalDigits) != nil })

            if phoneNumberDigits == "8885551212" {
                self.results.append(contact)
                return
            }
        }
    }
} catch let enumerateError {
    print(enumerateError.localizedDescription)
}

关于匹配"digit UserID",我不知道那个标识符是什么(是Contacts框架标识符还是Digits自己的标识符?)。