【问题标题】:Search Bar search through numbers and not only names with Contacts搜索栏搜索数字,而不仅仅是联系人的姓名
【发布时间】:2018-09-10 17:09:56
【问题描述】:

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

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

我该如何解决?

【问题讨论】:

  • 你在$0.givenName上收到了吗?或者其他什么线?
  • @Carpsen90 0.phoneNumbers

标签: ios swift contacts


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多