Swift 设置正确的CNContact.predicateForContacts以选择电子邮件

Swift 设置正确的CNContact.predicateForContacts以选择电子邮件,swift,nspredicate,cncontact,Swift,Nspredicate,Cncontact,设置CNContact.predicateForContacts以选择CNContacts中的“电子邮件”字段的正确方法是什么?比如在SQL中,像“%lbs%”这样的电子邮件在哪里 这是我的功能,删除了很多我想摆脱的导入联系人。但是函数返回0次点击。但在电子邮件领域,有1000多个“lbs”联系人 func deleteContacts(){ let store = CNContactStore() let predicate = CNContact.predicateForC

设置CNContact.predicateForContacts以选择CNContacts中的“电子邮件”字段的正确方法是什么?比如在SQL
中,像“%lbs%”这样的电子邮件在哪里

这是我的功能,删除了很多我想摆脱的导入联系人。但是函数返回0次点击。但在电子邮件领域,有1000多个“lbs”联系人

func deleteContacts(){
    let store = CNContactStore()

    let predicate = CNContact.predicateForContacts(matchingName: "lbs")
    let toFetch = [CNContactEmailAddressesKey]

    do{
        let contacts = try store.unifiedContacts(matching: predicate,keysToFetch: toFetch as [CNKeyDescriptor])

        guard contacts.count > 0
            else{
            print("No contacts found")
            return
        }

        guard let contact = contacts.first else{
            return
        }

        let req = CNSaveRequest()
        let mutableContact = contact.mutableCopy() as! CNMutableContact
        req.delete(mutableContact)

        do{
            try store.execute(req)
            print("Success, deleted the data: Count:  \(contacts.count)")
        } catch let e{
            print("Error = \(e)")
        }
    } catch let err{
        print(err)
    }
}

谓词正在尝试查找联系人姓名与字符串
lbs
匹配的联系人


没有用于查找电子邮件地址包含特定字符串的联系人的内置谓词。解决方案是使用
枚举联系人
,查看每个联系人的电子邮件地址列表。然后,您需要检查联系人的电子邮件地址是否包含您希望检查的字符串。

THX maddy。我将所有联系人和所选联系人的.emailAddresses.first?值循环为true,并将该值与“lbs”(字符串中的字符串)进行比较,然后删除。它工作得很好!