IOS开发搜索功能,需要监听输入框,用户实时输入便启动请求后台搜索结果,但是用户快速输入每一个单词,就触发一次服务器请求,有点浪费资源,且体验不好,做法是等待用户比如500ms后,再进行搜索请求,以下是Swift代码:
新建Debouncer.swift
import Foundation
class Debouncer: NSObject {
var callback: (() -> ())
var delay: Double
weak var timer: Timer?
init(delay: Double, callback: @escaping (() -> ())) {
self.delay = delay
self.callback = callback
}
func call() {
timer?.invalidate()
let nextTimer = Timer.scheduledTimer(timeInterval: delay, target: self, selector: #selector(Debouncer.fireNow), userInfo: nil, repeats: false)
timer = nextTimer
}
@objc func fireNow() {
self.callback()
}
}
如何调用
let debouncedFunction = Debouncer(delay: 0.50) {
//hell load http request
print("delayed printing")
}
@IBAction func searchChanged(_ sender: Any) {
debouncedFunction.call()
}
Java语言通用版本,请看https://blog.terrynow.com/2020/12/21/java-debounce/
Android版本,请看https://blog.terrynow.com/2020/12/22/android-debounce/
Javascript版本,请看https://blog.terrynow.com/2020/12/23/javascript-debounce/
文章评论