搜索栏搜索数字,而不仅仅搜索带有联系人的名称

问题描述 投票:0回答:1

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

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]'类型的值没有成员'范围'

我怎么解决?

ios swift contacts
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.