我目前正在尝试在我的联系人列表之间进行搜索,我所能找到的只是通过姓名和姓氏而不是号码来查找。这是我的代码:
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()
}
}
并给我错误:
'[CNLabeledValue]'类型的值没有成员'范围'
我怎么解决?
phoneNumbers
的CNContact
属性不是String
。这是一组CNLabeledValue
对象。
你需要扫描数组,从每个CNPhoneNumber
中提取CNLabeledValue
。然后获取电话号码的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
是来自CNContact
阵列的contactList
。第二个$0
是来自CNLabeldValue
阵列的phoneNumbers
。