键入Swift时搜索

S. *_*lin 5 search ios swift

我在你用Swift编写的时候尝试实现搜索.它已经工作但我需要一些调整.我发送每封输入的信件

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

    let debouncedFindUser = debounce(
        Static.searchDebounceInterval,
        Static.q,
        findUser)

    debouncedFindUser()
}
Run Code Online (Sandbox Code Playgroud)

对后端的请求.

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

    })
}
Run Code Online (Sandbox Code Playgroud)

我尝试了在这里找到的Debounce的实现如何去抖动方法调用?

我的问题:

如果在一定时间内触发了方法调用,我想"重启"它.所以让我们夸张一点.

请求仅在搜索文本未键入2秒后才开始.因此,如果我是一个快速的typer并且每0.5秒输入一个字母,除非我暂停至少2秒钟,否则永远不会触发请求.

Jer*_*ope 8

你可以使用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")
}
Run Code Online (Sandbox Code Playgroud)