我尝试在您用 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 的实现如何消除方法调用的反跳? https://stackoverflow.com/questions/27116684/how-can-i-debounce-a-method-call
我的问题:
如果在特定时间内触发了方法调用,我想“重新启动”该方法调用。所以让我们夸张一点。
该请求仅在 2 秒内未输入搜索文本后启动。因此,如果我打字速度很快,并且每 0.5 秒键入一个字母,则除非我暂停至少 2 秒,否则永远不会触发请求。
您可以使用 NSTimer。在 textDidChange 中启动或无效并重新启动计时器 2 秒。让计时器在实际弹出时触发 findUser 方法。
var debounceTimer: NSTimer?
@IBAction func test() {
if let timer = debounceTimer {
timer.invalidate()
}
debounceTimer = NSTimer(timeInterval: 2.0, target: self, selector: Selector("getUser"), userInfo: nil, repeats: false)
NSRunLoop.currentRunLoop().addTimer(debounceTimer!, forMode: "NSDefaultRunLoopMode")
}
func getUser() {
println("yeah")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)