Swift iOS9 New Contacts Framework - How to retrieve only CNContact that has a valid email address?

前端 未结 1 1274
孤独总比滥情好
孤独总比滥情好 2020-12-03 12:11

In the latest Contacts framework for iOS9, how to retrieve only CNContact that has a valid email address?

Current code:

func getContacts() -> [CN         


        
相关标签:
1条回答
  • 2020-12-03 13:00

    For now (iOS 9.0) it seems that no predicates (see CNContact Predicates) are available to filter contacts by email address!

    You can't write a custom predicate to filter contacts, as the doc says: "Note that generic and compound predicates are not supported by the Contacts framework"

    But of course you can do it "manually", I show you an example using fast enumeration:

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

    Note:

    In newer versions of Swift, the call to contactStore.enumerateContactsWithFetchRequest needs to be updated to:

    try contactStore.enumerateContacts(with: CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey] as [CNKeyDescriptor])) {
    
    0 讨论(0)
提交回复
热议问题