匹配CNcontact和Digits Find Friends Swift 3

匹配CNcontact和Digits Find Friends Swift 3,swift,cncontact,twitter-digits,Swift,Cncontact,Twitter Digits,我正在尝试构建一个iPhone应用程序,其中包含“数字找朋友”功能 我可以从数字中获取匹配的digitserid列表 现在我正在努力匹配UserID和CNContacts 请举例说明 更新如下: do { try contactStore.enumerateContactsWithFetchRequest(CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey, CNContactFamilyNameKey, CNContac

我正在尝试构建一个iPhone应用程序,其中包含“数字找朋友”功能

我可以从数字中获取匹配的
digitserid
列表

现在我正在努力匹配
UserID
CNContacts

请举例说明

更新如下:

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")
}

以上我已经设法获得了所有联系人,但我不知道如何将电话号码筛选器传递到该联系人中,并获得与
CNContact

的准确联系人匹配理想情况下,人们会期望
CNContactFetchRequest
谓词执行该工作,但(仍然;argh)仅接受使用
CNContact
定义的谓词的狭窄列表(例如
CNContact
predicateForContacts(匹配名称:)
predicateForContacts(带标识符:)
。它甚至不接受基于块的
redInspate

因此,您必须枚举,自己查找匹配项,例如

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($0).rangeOfCharacter(from: CharacterSet.decimalDigits) != nil })

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

关于匹配“digit UserID”,我不知道该标识符是什么(是联系人框架标识符还是Digits自己的标识符?)。

哦,这是我自己的标识符。是否可以修改答案以包含搜索字符串(姓名、电话、电子邮件)如果没有,你能给我指出另一个解决方案吗。Thanks@DavidDelMonte-当然可以。如果是简单的搜索,您可以提供。但我认为这不会在电话号码内搜索,因此您可能必须在
for
循环中添加
If
语句,在您想要的任何字段中检查搜索的字符串。请参阅。