Einfacher Nutzen, um nur Code von Zeit zu Zeit auszuführen.
Dadurch wird der Block nur für einen vorgegebenen name ausgeführt, wenn das letzte Mal, als er angerufen wurde, größer als limit oder nie gerufen wurde.
Dies ist sehr praktisch, um das Sicht in viewDidAppear: zu erfrischen.
Die Ratenlimit ist vollständig fadensicher. Unter der MIT -Lizenz veröffentlicht.
Wir beginnen mit einem 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.
}Die Begrenzer werden nicht über Anwendungseinführungen bestehen.
TimedLimiter entspricht dem SyncLimiter -Protokoll. Dies bedeutet, dass der von Ihnen ausführende Block in der Warteschlange, von der Sie ihn genannt haben, synchron aufgerufen wird, wenn er feuern sollte. TimedLimiter verwendet Zeit, um zu begrenzen.
CountedLimiter ist ebenfalls enthalten. Dies funktioniert, indem sie ein Limit als UInt für die maximale Anzahl von Male einnehmen, um den Block auszuführen.
Das SyncLimiter -Protokoll hat eine wirklich ordentliche Erweiterung, mit der Sie solche Dinge tun können:
let funFactLimiter = CountedLimiter ( limit : 2 )
let funFact = funFactLimiter . execute { ( ) -> String in
// Do real things to get a fun fact from a list
return " Hi "
} Jetzt ist funFact eine String? . Es ist nur eine optionale, was auch immer Sie aus dem Block zurückkehren. Der zurückgegebene Wert ist nil , wenn der Block nicht ausgeführt wurde.
Sie können natürlich auch Ihre eigene SyncLimiter machen!
Ein AsyncLimiter ist enthalten. Sie können auch Ihre eigenen machen. Der mitgelieferte asynchronisierte Limiter ist DebouncedLimiter . Dies ist perfekt, um Netzwerkanforderungen als Benutzertyp oder andere Aufgaben zu erstellen, die auf sehr häufige Ereignisse reagieren.
Die Schnittstelle ist etwas anders:
let searchLimiter = DebouncedLimiter ( limit : 1 , block : performSearch )
func textDidChange ( ) {
searchLimiter . execute ( )
}Sie müssten den Limiter in einem Initialisierer einrichten, da er auf eine Instanzmethode verweist, aber Sie erhalten die Idee. Der Block wird in dieser Konfiguration höchstens einmal pro Sekunde aufgerufen.
Ziemlich einfach!
Öffnen Sie das mitgelieferte Xcode -Projekt für eine Beispiel -App und Tests.
Karthago ist die empfohlene Methode zur Installation der Tarifbegrenzung. Fügen Sie Ihrem Cartfile Folgendes hinzu:
github "soffes/RateLimit" Fügen Sie Ihrem Podfile Folgendes hinzu:
pod "RateLimit" Führen Sie dann pod install aus.