2016-08-17 3 views
4

Я пытаюсь построить iPhone App с цифрами Найти друга особенностьMatching CNcontact и Digits Найти друзей Swift 3

я могу получить список подходящих digitUserID из цифр.

Теперь я изо всех сил стараюсь соответствовать 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

ответ

8

В идеале , можно было бы ожидать predicateCNContactFetchRequest, чтобы выполнить задание, но тот (все равно argh) принимает только узкий список предикатов, определенный с помощью CNContact (например, CNContactpredicateForContacts(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($0).rangeOfCharacter(from: CharacterSet.decimalDigits) != nil }) 

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

Относительно соответствия «цифры UserID», я не знаю, что идентификатор (является его структура Контакты идентификатор или собственный идентификатор цифр?).

+0

О, это мой собственный идентификатор. –

+0

Можно ли изменить ответ, чтобы включить строку поиска (имя, телефон, адрес электронной почты)? Если нет, можете ли вы указать мне другое решение. Спасибо –

+0

@DavidDelMonte - Конечно. Если бы это был простой поиск, вы могли бы предоставить ['предикат'] (https://developer.apple.com/documentation/contacts/cncontactfetchrequest/1403080-predicate). Но я не думаю, что это будет искать внутри телефонных номеров, поэтому вам может понадобиться добавить оператор 'if' внутри цикла' for', проверяя вашу искомую строку в любых полях, которые вы хотите. См. Https://stackoverflow.com/a/42749708/1271826. – Rob