节流器
节流器是一个组件对象,可用于调节执行过程的速度。
可以使用闭包轻松定义进程。您还可以自定义延迟时间,甚至更改其调度队列。
为什么不直接使用 RxSwift?
这个库被打造成了一个简单的小组件。您无需学习复杂的语法。函数被设计为具有少量的输入,使您的代码更简洁。
如何使用?
通过创建一个节流器实例,你可以在闭包中定义一个过程,并根据需要自定义时间。设置完成后,只需在节流器实例上调用throttle()
即可。
示例
假设你希望在输入UISearchBar时自动发送搜索请求,但又不想对每个按键按下都发送请求。作为一个负责任的开发者,你想要对搜索进行节流。这可以使用以下方式轻松实现。
func commonInit() {
let delay: TimeInterval = 0.5
let dispatchQueue = DispatchQueue.main
let dispatchBlock = { [weak self] in
guard let strongSelf = self,
let searchString = strongSelf.searchBar.text else {
return
}
strongSelf.searchService.search(searchString)// send search request
}
throttler = Throttler(delay: delay, dispatchQueue: dispatchQueue, dispatchBlock: dispatchBlock)
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
// We don't want to send a search request for every character typed.
// But using the throttler, it will fire off only after the delay time.
throttler.throttle()
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
// But we can also fire off immediately
throttler.fire()
}