Как создать дебаггерный таймер в Swift

Одна из распространенных проблем, которую люди склонны недооценивать, — это когда пользователи решают нагрузить тяжелую функциональность в вашем приложении, например, нажимая на кнопку множество раз за небольшой промежуток времени, что приводит к сбоям и неопределенному поведению.

Один из способов преодолеть эту проблему — создать таймер отбоя. Для этого мы определим пару переменных внутри класса, в котором используется функциональность:

private var debouncingTimer: Timer? = nil
private let DEBOUNCE_TIME: TimeInterval = 0.5
Вход в полноэкранный режим Выход из полноэкранного режима

Время отбоя — это минимальный интервал времени, в течение которого должен произойти тяжелый код. В течение этого промежутка времени другие действия пользователя будут игнорироваться.

Затем, находясь внутри розетки кнопки, которая запускает вашу тяжелую функциональность, мы выполняем следующее:

if debouncingTimer == nil || debouncingTimer?.isValid == false {
    self.debouncingTimer = Timer.scheduledTimer(
        withTimeInterval: DEBOUNCE_TIME,
        repeats: false) { [weak self] timer in
                timer.invalidate()
                self?.debouncingTimer = nil
            }

    // your heavy functionality
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Делая это, мы устанавливаем таймер каждый раз, когда срабатывает тяжелый код, и защищаем его до тех пор, пока таймер продолжает работать.

Когда таймер срабатывает, функциональность снова становится доступной для пользователя.

Оцените статью
Procodings.ru
Добавить комментарий