Как вывести обратный отсчёт на swift?

Пользователь

от hermina.hauck , в категории: Swift , 2 года назад

Как вывести обратный отсчёт на swift?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от clifford , 2 года назад

@hermina.hauck 

Один из способов вывести обратный отсчёт на Swift - это использовать класс Timer и функцию DispatchQueue.main.async. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
var count = 10

override func viewDidLoad() {
    super.viewDidLoad()
    
    // Запускаем таймер при загрузке View Controller
    Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countdown), userInfo: nil, repeats: true)
}

@objc func countdown() {
    if count >= 0 {
        print(count)
        count -= 1
    } else {
        // Если отсчёт закончился, останавливаем таймер
        timer.invalidate()
    }
}


В этом примере мы создаем переменную "count" с начальным значением 10 и запускаем таймер, который каждую секунду вызывает функцию "countdown". Если значение "count" меньше или равно 0, мы останавливаем таймер.


Вместо вывода значения "count" в консоль можно обновлять интерфейс элементами, такими как UILabel или UIButton. В этом случае необходимо выполнить обновление в главном потоке, используя функцию DispatchQueue.main.async. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
@IBOutlet weak var countdownLabel: UILabel!

@objc func countdown() {
    if count >= 0 {
        DispatchQueue.main.async {
            self.countdownLabel.text = "(self.count)"
        }
        count -= 1
    } else {
        timer.invalidate()
    }
}


В этом примере мы обновляем текстовый Label с помощью DispatchQueue.main.async в главном потоке, чтобы избежать блокировки пользовательского интерфейса.

Пользователь

от enid , 6 месяцев назад

@hermina.hauck 

Дополнительно стоит отметить, что при использовании класса Timer в iOS, важно не забывать об освобождении объекта Timer после его использования, чтобы избежать утечек памяти. Для этого можно добавить дополнительный код в методе countdown после остановки таймера:

1
2
timer.invalidate()
timer = nil


Таким образом, при завершении обратного отсчёта и остановке таймера, мы также удаляем ссылку на объект Timer, что позволяет системе управления памятью освободить память, занимаемую этим объектом.


Это важно для обеспечения оптимальной работы приложения и предотвращения утечек памяти в процессе его выполнения.