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

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'

我该如何解决?

CNContactphoneNumbers 属性 不是 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