搜索栏搜索号码,而不仅仅是姓名与联系人
Search Bar search through numbers and not only names with 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 {
[=10=].givenName.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil ||
[=10=].familyName.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil ||
[=10=].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
。然后得到phone号的stringValue
号。最后,对该字符串值使用 range(of:)
。
变化:
[=10=].phoneNumbers.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil
至:
[=11=].phoneNumbers.contains { [=11=].value.stringValue.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil }
请注意,第一个 [=20=]
是 contactList
数组中的 CNContact
。第二个 [=20=]
是联系人 phoneNumbers
数组中的 CNLabeldValue
。
我目前正在尝试在我的联系人列表之间进行搜索,我所能找到的只是通过名字和姓氏而不是电话号码。这是我的代码:
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 {
[=10=].givenName.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil ||
[=10=].familyName.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil ||
[=10=].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
。然后得到phone号的stringValue
号。最后,对该字符串值使用 range(of:)
。
变化:
[=10=].phoneNumbers.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil
至:
[=11=].phoneNumbers.contains { [=11=].value.stringValue.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive ]) != nil }
请注意,第一个 [=20=]
是 contactList
数组中的 CNContact
。第二个 [=20=]
是联系人 phoneNumbers
数组中的 CNLabeldValue
。