RateLimit
Version 2.1.1
简单的实用程序,仅用于每隔一段时间执行代码。
如果上次被称为大于limit或从未被调用,则只会执行给定name传递的块。
对于viewDidAppear:但是,如果它只是刷新的话,就可以防止它发生很多吨。
速率限制是完全螺纹安全的。根据MIT许可发布。
我们将从TimedLimiter开始:
// Initialize with a limit of 5, so you can only use this once every 5 seconds.
let refreshTimeline = TimedLimiter ( limit : 5 )
// Call the work you want to limit by passing a block to the execute method.
refreshTimeline . execute {
// Do some work that runs a maximum of once per 5 seconds.
}限制器在应用程序启动过程中不会持续存在。
TimedLimiter符合SyncLimiter协议。这意味着您通过的执行块将在您从应发射的队列中同步调用。 TimedLimiter利用时间限制。
还包括CountedLimiter 。这是通过将限制作为UInt最大次数来运行块的限制。
SyncLimiter协议具有非常整洁的扩展名,可以让您做这样的事情:
let funFactLimiter = CountedLimiter ( limit : 2 )
let funFact = funFactLimiter . execute { ( ) -> String in
// Do real things to get a fun fact from a list
return " Hi "
}现在funFact是String? 。这只是您从街区返回的任何东西的可选。如果块未运行,则返回的值将nil 。
您当然也可以制作自己的SyncLimiter !
包括一个AsyncLimiter 。您也可以自己制作。随附的异步限制器是DebouncedLimiter 。这是将网络请求作为用户类型或其他响应非常频繁事件的任务的完美选择。
界面略有不同:
let searchLimiter = DebouncedLimiter ( limit : 1 , block : performSearch )
func textDidChange ( ) {
searchLimiter . execute ( )
}您必须在初始化器中设置限制器,因为它引用了一种实例方法,但是您明白了。该配置中最多每秒一次调用该块。
很容易!
为示例应用程序和测试打开随附的Xcode项目。
迦太基是安装速率限制的推荐方法。将以下内容添加到您的Cartfile:
github "soffes/RateLimit"将以下内容添加到您的Podfile :
pod "RateLimit"然后运行pod install 。