Utilitas sederhana untuk hanya mengeksekusi kode sesering mungkin.
Ini hanya akan mengeksekusi blok yang diteruskan untuk name tertentu jika terakhir kali dipanggil lebih besar dari limit atau tidak pernah dipanggil.
Ini benar -benar berguna untuk hal -hal yang menyegarkan di viewDidAppear: tetapi mencegahnya terjadi satu ton jika hanya disegarkan.
Batas tingkat sepenuhnya aman utas. Dirilis di bawah lisensi MIT.
Kami akan mulai dengan 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.
}Pembatas tidak bertahan di seluruh peluncuran aplikasi.
TimedLimiter sesuai dengan protokol SyncLimiter . Ini berarti bahwa blok yang Anda lewati untuk dieksekusi akan disebut secara sinkron pada antrian yang Anda sebut dari jika harus ditembakkan. TimedLimiter menggunakan waktu untuk membatasi.
CountedLimiter juga disertakan. Ini berfungsi dengan mengambil batas sebagai UInt untuk jumlah maksimum kali untuk menjalankan blok.
Protokol SyncLimiter memiliki ekstensi yang sangat rapi yang memungkinkan Anda melakukan hal -hal seperti ini:
let funFactLimiter = CountedLimiter ( limit : 2 )
let funFact = funFactLimiter . execute { ( ) -> String in
// Do real things to get a fun fact from a list
return " Hi "
} Sekarang funFact adalah String? . Ini hanya opsional dari apa pun yang Anda kembalikan dari blok. Nilai yang dikembalikan adalah nil jika blok tidak berjalan.
Anda tentu saja dapat membuat SyncLimiter Anda sendiri juga!
Satu AsyncLimiter disertakan. Anda bisa membuatnya sendiri juga. Limiter async yang disertakan adalah DebouncedLimiter . Ini sempurna untuk membuat permintaan jaringan sebagai jenis pengguna atau tugas lain yang merespons acara yang sangat sering.
Antarmuka sedikit berbeda:
let searchLimiter = DebouncedLimiter ( limit : 1 , block : performSearch )
func textDidChange ( ) {
searchLimiter . execute ( )
}Anda harus mengatur limiter dalam inisialisasi karena merujuk metode instance, tetapi Anda mendapatkan idenya. Blok akan dipanggil paling banyak sekali per detik dalam konfigurasi ini.
Cukup mudah!
Buka proyek XCODE yang disertakan untuk contoh aplikasi dan pengujian.
Carthage adalah cara yang disarankan untuk memasang batas tingkat. Tambahkan yang berikut ke cartfile Anda:
github "soffes/RateLimit" Tambahkan yang berikut ke Podfile Anda:
pod "RateLimit" Kemudian jalankan pod install .