Я пытаюсь использовать UISearchView
для запроса мест Google. При этом при изменении текста вызывается мой UISearchBar
, я делаю запрос в google-места. Проблема в том, что я бы скорее отказался от этого вызова, чтобы запросить только один раз за 250 мс, чтобы избежать ненужного сетевого трафика. Я бы предпочел не писать эту функцию самостоятельно, но я буду, если мне нужно.
Я нашел: https://gist.github.com/ShamylZakariya/54ee03228d955f458389, но я не совсем уверен, как его использовать:
func debounce( delay:NSTimeInterval, #queue:dispatch_queue_t, action: (()->()) ) -> ()->() {
var lastFireTime:dispatch_time_t = 0
let dispatchDelay = Int64(delay * Double(NSEC_PER_SEC))
return {
lastFireTime = dispatch_time(DISPATCH_TIME_NOW,0)
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
dispatchDelay
),
queue) {
let now = dispatch_time(DISPATCH_TIME_NOW,0)
let when = dispatch_time(lastFireTime, dispatchDelay)
if now >= when {
action()
}
}
}
}
Вот одна вещь, которую я пробовал использовать вышеприведенный код:
let searchDebounceInterval: NSTimeInterval = NSTimeInterval(0.25)
func findPlaces() {
// ...
}
func searchBar(searchBar: UISearchBar!, textDidChange searchText: String!) {
debounce(
searchDebounceInterval,
dispatch_get_main_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT),
self.findPlaces
)
}
Результирующая ошибка Cannot invoke function with an argument list of type '(NSTimeInterval, $T5, () -> ())
Как использовать этот метод, или есть лучший способ сделать это в iOS/Swift.