我目前正在尝试在我的联系人列表之间进行搜索,但我所能找到的只是姓名和姓氏,而不是电话号码。这是我的代码:
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'
如何解决?
最佳答案
CNContact
的 phoneNumbers
属性不是 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 }
请注意,第一个 $0
是 contactList
数组中的 CNContact
。第二个 $0
是联系人 phoneNumbers
数组中的 CNLabeldValue
。
关于ios - 搜索栏搜索号码,而不仅仅是联系人姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52262530/