ios - 搜索栏搜索号码,而不仅仅是联系人姓名

标签 ios swift contacts

我目前正在尝试在我的联系人列表之间进行搜索,但我所能找到的只是姓名和姓氏,而不是电话号码。这是我的代码:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if searchBar.text == nil || searchBar.text == "" {
        inSearchMode = false
        view.endEditing(true)
        self.tableView.reloadData()
    } else {
       inSearchMode = true
       filteredData = contactList.filter {
            $0.givenName.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil ||
            $0.familyName.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil ||
            $0.phoneNumbers.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil
        }
       self.tableView.reloadData()
    }
}

并且给我错误:

Value of type '[CNLabeledValue]' has no member 'range'

如何解决?

最佳答案

CNContactphoneNumbers 属性不是 String。它是一个 CNLabeledValue 对象数组。

您需要扫描数组,从每个 CNLabeledValue 中提取 CNPhoneNumber。然后获取电话号码的stringValue。最后,对该字符串值使用 range(of:)

更改:

$0.phoneNumbers.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil

至:

$0.phoneNumbers.contains { $0.value.stringValue.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil }

请注意,第一个 $0contactList 数组中的 CNContact。第二个 $0 是联系人 phoneNumbers 数组中的 CNLabeldValue

关于ios - 搜索栏搜索号码,而不仅仅是联系人姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52262530/

相关文章:

powershell - 获取联系人通讯组

java - 让用户创建业务或个人联系人的代码

Android 2.0 如何获取联系人组中的显示名称和号码

ios - 如何检查外观属性是否已设置?

ios - swift - 异步使用 renderInContext 时 UILabel 文本不是渲染器

ios - Async NSURLConnection 触发其他 Async NSURLConnection : what is the best way of doing this?

ios - 无效的 `VideoRow.podspec` 文件 : undefined method `join' for "TLPhotoPicker":String

swift - 我不想要求我的应用程序登录,但如何将它们的数据分开?

ios - Swift 3 中的 NSFastEnumeration

ios - 仅关闭呈现的 View Controller 而不是整个导航堆栈 Swift