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)似乎没有谓词( see CNContact Predicates)可用于通过电子邮件地址过滤联系人!

您不能编写自定义谓词来过滤联系人,正如文档所说:
“请注意,Contacts框架不支持通用谓词和复合谓词”

但是当然你可以“手动”完成它,我给你看一个使用快速枚举的例子:

let contactStore = CNContactStore()
fetchRequest.unifyResults = true //True should be the default option
do {
    try contactStore.enumerateContactsWithFetchRequest(CNContactFetchRequest(keysToFetch: [CNContactGivennameKey,CNContactEmailAddressesKey])) {
        (contact,cursor) -> Void in
        if (!contact.emailAddresses.isEmpty){
            //Add to your array
        }
    }
}
catch{
    print("Handle the error please")
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...