Swift iOS9 New Contacts Framework - Как получить только CNContact, который имеет действительный адрес электронной почты?

В последней платформе контактов для iOS9, как получить только CNContact, который имеет действительный адрес электронной почты?

Текущий код:

func getContacts() -> [CNContact] {
    let contactStore = CNContactStore()
    let predicate: NSPredicate = NSPredicate(format: "")
    let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey]

    do {
        return try contactStore.unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch)
    } catch {
        return []
    }
}

1 ответ

Решение

На данный момент (iOS 9.0) кажется, что нет предикатов ( см. Предикаты CNContact), доступных для фильтрации контактов по адресу электронной почты!

Вы не можете написать собственный предикат для фильтрации контактов, так как в документе говорится: "Обратите внимание, что универсальные и составные предикаты не поддерживаются платформой контактов"

Но, конечно, вы можете сделать это "вручную", я покажу вам пример с использованием быстрого перечисления:

let contactStore = CNContactStore()
fetchRequest.unifyResults = true //True should be the default option
do {
    try contactStore.enumerateContactsWithFetchRequest(CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey])) {
        (contact, cursor) -> Void in
        if (!contact.emailAddresses.isEmpty){
            //Add to your array
        }
    }
}
catch{
    print("Handle the error please")
}
Другие вопросы по тегам