Throttler — библиотека, которая ограничивает излишне повторяющиеся действия. Типичная проблема, которую может решить Throttler — пользователь много раз нажимает кнопку, которая запрашивает асинхронный сетевой вызов. Throttler в одну строчку кода ограничивает такие действия до одного нормального вызова.
Пример использования:
import UIKit import Throttler class ViewController: UIViewController { @IBOutlet var button: UIButton! var index = 0 /******** Assuming your users will tap the button, and request asyncronous network call 10 times(maybe more?) in a row within very short time nonstop. *********/ @IBAction func click(_ sender: Any) { print("click1!") Throttler.go { // Imaging this is a time-consuming and resource-heavy task that takes an unknown amount of time! let url = URL(string: "https://jsonplaceholder.typicode.com/todos/1")! let task = URLSession.shared.dataTask(with: url) {(data, response, error) in guard let data = data else { return } self.index += 1 print("click1 : \(self.index) : \(String(data: data, encoding: .utf8)!)") } } } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } }