Swift, как управлять несколькими запросами и отвечать в поиске API - PullRequest
0 голосов
/ 14 октября 2019

Я работаю над проектом, в котором есть панель поиска и табличное представление. поток выглядит следующим образом: когда набирается символ, создается запрос, и в табличном представлении отображается ответ. Поэтому я хочу реализовать, как если бы я набрал «coronory» -> показывает результаты с coronory, то я стираю «ry» -> «corono» -> если предыдущий запрос не завершен, отмените его -> сделать запрос для «corono»"и показать данные в табличном представлении! Также необходимо управлять множественным ответом, и в табличном представлении должен отображаться только самый последний результат поиска (я использую almofire для вызова API)

1 Ответ

0 голосов
/ 14 октября 2019

Я предполагаю, что вы используете контроллер представления поиска и действительно вводите контроллер представления поиска и по типу каждого символа вы делаете вызов на сервере, чтобы получить результаты, связанные с введенным словом. Есть делегат на UISearchViewController. Вы можете использовать cancelPreviousPerformRequests, вы можете использовать свой собственный searchViewModel для получения данных с сервера. это предотвратит быстрый поиск.

func updateSearchResults(for searchController: UISearchController) {
// This prevent multiple server call, make delay in each call
    NSObject.cancelPreviousPerformRequests(withTarget: self, selector: 
#selector(self.reload(_:)), object: searchController.searchBar)
    perform(#selector(self.reload(_:)), with: searchController.searchBar, afterDelay: 0.75)
}

@objc func reload(_ searchBar: UISearchBar) {
    guard let query = searchBar.text, query.trimmingCharacters(in: .whitespaces) != "" else {
        print("nothing to search")
        return
    }

    print(query)
    self.searchViewModel.getData(searchWord: query) {
        DispatchQueue.main.async {
            self.tableView.reloadData()
        } 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...