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 。