Swift iOS9新联系人框架 – 如何检索只有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 [] } } 

现在(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") }