Я предполагаю, что вы используете контроллер представления поиска и действительно вводите контроллер представления поиска и по типу каждого символа вы делаете вызов на сервере, чтобы получить результаты, связанные с введенным словом. Есть делегат на 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()
}
}
}