Панель поиска поиск по номерам, а не только имена с контактами - PullRequest
0 голосов
/ 10 сентября 2018

В настоящее время я пытаюсь искать между своим списком контактов и всем, что я могу найти, просматривая имена и фамилии, а не номера телефонов. Это мой код:

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]' не имеет члена 'range'

Как я могу решить?

1 Ответ

0 голосов
/ 10 сентября 2018

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 контакта.

...