Я пытаюсь реализовать поиск по мере ввода, написанный в Swift. Он работает уже, но мне нужна настройка. Я отправляю каждое письмо, напечатанное вПоиск по мере ввода Swift
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
let debouncedFindUser = debounce(
Static.searchDebounceInterval,
Static.q,
findUser)
debouncedFindUser()
}
запрос на бэкэнд.
func findUser() ->() {
SearchService.sharedInstance.getUser(0, numberOfItems: 100,
searchString: searchUserBar.text.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
,
success: {SearchUserDto -> Void in
if self.searchUserBar.text != nil {
self.updateSearch()
}
},
failure: {NSError -> Void in
})
}
Я попробовал реализацию DEBOUNCE здесь How can I debounce a method call?
Моей проблема:
Я хочу «перезагрузка» вызов метода, если он был вызван в течение определенного времени. Так что давайте немного преувеличиваем.
Запрос должен начаться только после того, как текст поиска не был введен в течение 2 секунд. Поэтому, если я быстро напечатаю и набираю каждые 0,5 секунды письмо, запрос никогда не должен запускаться, за исключением того, что я приостанавливаю не менее 2 секунд.
Почему бы просто не использовать '' scheduledTimerWithInterval ... Но да, 'NSTimer' является гораздо более простым способом реализовать debouncing, так как вы можете отменить таймер, но не можете отменить 'dispatch_after' –