Вы можете создать Timer
с повторением каждую минуту (потому что вам ни для чего не нужны секунды), начиная со следующей минуты (поэтому перед началом Timer
вызовите getCurrentTime()
один раз).
Каждый минутный код в закрытии timer
выполняется, поэтому вы можете сказать, что хотите вызвать getCurrentTime()
.Теперь ваша currentTimeLabel
будет обновляться каждую минуту
let now = Date()
let date = Calendar.current.date(bySettingHour: Calendar.current.component(.hour, from: now), minute: Calendar.current.component(.minute, from: now) + 1, second: 0, of: now)!
let timer = Timer(fire: date, timeInterval: 60, repeats: true) { _ in
self.getCurrentTime()
}
Также я бы порекомендовал вам иметь переменную formatter
вне метода (в глобальной области видимости)
lazy var formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm" // or "hh:mm a" if you need to have am or pm symbols
return formatter
}()
а затем в getCurrentTime()
просто получите String
и измените text
из currentTimeLabel
func getCurrentTime() {
currentTimeLabel.text = formatter.string(from: Date())
}