gpt4 book ai didi

swift - 过滤联系人返回混合联系信息 - Swift

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

我是一名新的 Swift 开发人员。我已成功从手机中提取联系人并将它们保存在联系人数组中,每个联系人都具有以下结构:

struct Contact {

var contactDetails:CNContact
var isFavorite:Bool

该数组称为 deviceContacts。

我还设置了一个名为 searchResults 的空联系人数组。

我的联系人表格中有一个搜索栏,我希望在您键入时自动过滤联系人。我可以使用以下搜索栏代码成功完成此操作:

extension ContactsViewController: UISearchBarDelegate {

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

searchResults = deviceContacts.filter{($0.contactDetails.familyName.prefix(searchText.count) == searchText)}
searching = true
tableView.reloadData()

// This does not work. It filters by the last name. But it keeps John as the first name, etc. It does not pull the full contact.

}
}

尽管此功能会在您键入时进行搜索,并在您键入更多字符时实时过滤结果,但结果会很困惑。它们显示正确的姓氏,但显示错误的名字。名字从列表顶部开始。因此,例如,如果您在模拟器中搜索标准联系人“Bell”,您将得到 Bell、John。贝尔是列表中的第二个人,约翰是列表中的第一个人。

我尝试使用谓词搜索来搜索联系人,但我无法像此函数那样在实时键入时进行搜索。

有没有办法在搜索时提取完整的联系人?或者一种仅提取对匹配联系人的引用并将该联系人放入 searchResults 数组的方法?或者使用谓词方法在键入时进行搜索的方法?

如有任何帮助,我们将不胜感激。

最佳答案

在 cellForRowAt 中,我犯了一个错误,没有更改对名字的 searchResults 的引用,只更改了姓氏的引用。这是 tableView 的代码:

if searching {
cell.textLabel?.text = searchResults[indexPath.row].contactDetails.familyName+", "+searchResults[indexPath.row].contactDetails.givenName
} else {
cell.textLabel?.text = deviceContacts[indexPath.row].contactDetails.familyName+", "+deviceContacts[indexPath.row].contactDetails.givenName
}

关于swift - 过滤联系人返回混合联系信息 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250352/

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