Дополнительный аргумент в вызове при использовании панели поиска - PullRequest
0 голосов
/ 16 сентября 2018

Я получаю сообщение об ошибке «Дополнительный аргумент в вызове», когда пытаюсь внедрить панель поиска в свое приложение.

Я прочитал другие вопросы, которые включают:

Swift - дополнительный аргумент в вызове

Swift 4 «Дополнительный аргумент в вызове» Rxswift

И другие, но безуспешно.

Вот мой код:

extension ViewController: UISearchBarDelegate {

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {

    todoItems = todoItems.filter("title CONTAINS[cd] %@", searchBar.text!).sorted(byKeyPath: "dateCreated", ascending: true) // Getting Error on this line

    tableView.reloadData()

}


func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if searchBar.text?.count == 0 {
        loadItems()

        DispatchQueue.main.async {
            searchBar.resignFirstResponder()
        }

    }
}

}

1 Ответ

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

Вы смешиваете синтаксис NSPredicate и filter, а также синтаксис NSSortDescriptor и sorted.Это не может работать.

Предполагая, что todoItems является массивом пользовательской структуры или класса, нативным способом Swift является

todoItems = todoItems.filter{ $0.title.range(of: searchBar.text!, options: [.caseInsensitive, .diacriticInsensitive]) != nil}
                     .sorted{ $0.dateCreated < $1.dateCreated}

Примечание: Учтите, что вы собираетесь перезаписать массив, содержащий всеэлементы с отфильтрованным массивом ...

...