【发布时间】:2015-01-22 20:44:56
【问题描述】:
我正在尝试使用 UISearchView 来查询 Google 地方。这样做时,在我的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 中是否有更好的方法。
【问题讨论】:
-
您是否尝试过使用链接库?
-
@nhgrif 我不确定那是什么,我对原生 iOS 领域还很陌生。
-
什么是什么?您链接到 github 页面。我没看。您是否尝试使用那里可用的东西?为什么要关联?
-
@nhgrif 哎呀被误解了。我不太确定该函数的第二个参数是什么或如何使用它。浏览代码似乎是有道理的。我尝试了一些变体,但没有成功。
-
您应该发布您从该代码中尝试过的内容。你可能已经接近了。
标签: ios swift throttling