iOS Dispatch获取延迟时间的最后一项



我使用dispatch_after在我的textfield

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

每5秒只触发一次my println。

用例:快速输入"abcde"- Get back "abcde" println back

而不是(5秒后)——一个- - - - - - ab——美国广播公司——abcd——中的

        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(5 * Double(NSEC_PER_SEC)))
    dispatch_after(delayTime, dispatch_get_main_queue()) {
        println("test: (searchText)")
    }

你可以引入一个新的var timer: NSTimer?

然后在你的textDidChange函数中你可以这样做

if timer == nil {
  timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "printTextFieldInput:", userInfo: textField, repeats: false)
}

对应的打印函数如下:

func printTextFieldInput(timer: NSTimer) -> Void {
  if let textField = timer.userInfo as? UITextField {
    println(textField.text)
  }
  timer.invalidate()
  self.timer = nil
}

最新更新