如何使用SWIFT 3获取未命名&John&q;的联系人 [英] How to fetch contacts NOT named "John" with Swift 3

查看:0
本文介绍了如何使用SWIFT 3获取未命名&John&q;的联系人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有方法可以使用Contacts framework而不使用属性来获取联系人?

示例:

myContactArray = unifiedContactsNotCalled("John")

PS:我知道这行代码一点也不像真正的代码,它只是一个用于说明目的的建议😉

推荐答案

在概述如何查找与名称不匹配的名称之前,让我们回顾一下如何查找与名称匹配的名称。简而言之,您将使用谓词:

let predicate = CNContact.predicateForContacts(matchingName: searchString)
let matches = try store.unifiedContacts(matching: predicate, keysToFetch: [CNContactFormatter.descriptorForRequiredKeys(for: .fullName)])    // use whatever keys you want

(显然,您应该将其包装在do-try-catch结构中,或者您想要的任何错误处理模式中。)

遗憾的是,您不能在Contact框架中使用您自己的定制谓词,而只能使用CNContact预定义的谓词。因此,如果您想要查找名称中不包含"John"的联系人,您必须手动enumerateContacts(with:)并从中构建结果:

let formatter = CNContactFormatter()
formatter.style = .fullName

let request = CNContactFetchRequest(keysToFetch: [CNContactFormatter.descriptorForRequiredKeys(for: .fullName)])   // include whatever other keys you may need

// find those contacts that do not contain the search string

var matches = [CNContact]()
try store.enumerateContacts(with: request) { contact, stop in
    if !(formatter.string(from: contact)?.localizedCaseInsensitiveContains(searchString) ?? false) {
        matches.append(contact)
    }
}

这篇关于如何使用SWIFT 3获取未命名&John&q;的联系人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆