gpt4 book ai didi

ios - 如何使用 swift 列出属于 iOS 组的联系人

转载 作者:行者123 更新时间:2023-11-30 12:27:14 25 4
gpt4 key购买 nike

我在Apple开发人员文档中找到了以下代码,但是我无法理解如何正确调用此函数。非常感谢任何指导。

func fetchContactsInGroup(with identifier: String, completion: @escaping (_ contacts: [CNContact]) -> Void) {
var result = [CNContact]()
// Fetch only the full name of a person or organization.
let request = CNContactFetchRequest(keysToFetch: [CNContactFormatter.descriptorForRequiredKeys(for: .fullName)])

// Predicate to fetch all contacts that are members of the specified group.
request.predicate = CNContact.predicateForContactsInGroup(withIdentifier: identifier)

contactStoreQueue.async {
do {
try self.store.enumerateContacts(with: request, usingBlock: {(contact, status) -> Void in
// Add each retured contact to result.
result.append(contact)
})
} catch let error as NSError {
print("Error \(error.localizedDescription)")
}

DispatchQueue.main.async {
completion(result)
}
}
}

最佳答案

好的,从评论看来,您的问题出在 block 上。调用此方法的最简单方法如下:

fetchContactsInGroup(with: "groupName") { (retrievedContacts:[CNContact]) in
// your code to proccess retrievedContacts goes here
}

现在,解释一下:这个completion参数是一个闭包 - 只需将其存储在变量中的代码块即可。这是 iOS SDK 中相当常见的模式,因此我鼓励您了解它。该 block 已通过,因为该方法本身异步检索联系人。当它完成时,将调用传递的代码块。重要的是要记住,这种情况将来随时可能发生。如果在主线程上同步检索联系人,您会得到应用程序挂起的印象,这很糟糕。
这是一个非常简单的解释,here is a documentation about closures in Swift 。我强烈建议您仔细阅读它以及有关它的其他在线教程。如果您之前没有使用过闭包/lambda,那么它可能不太容易掌握,但您确实应该习惯它。

关于ios - 如何使用 swift 列出属于 iOS 组的联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44040559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com