我正在尝试使用UISearchView
查询谷歌地点。在这样做时,对于我的UISearchBar
的文本更改调用,我会向谷歌地点发出请求。问题是,我宁愿将此调用防抖动以便每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中有更好的方法吗。