Чтобы выполнить функцию в полночь, чтобы сначала изменить пользовательский интерфейс, необходимо, чтобы приложение было открыто. Если приложение даже не открыто, то нет интерфейса для обновления. Следовательно, не имеет смысла задавать серверу эту функцию, поскольку приложение может даже не быть открытым. В любом случае, задача обновления пользовательского интерфейса должна лежать на клиенте.
Поэтому создайте таймер на клиенте (в вашем приложении), который будет выполнять вызов каждую полночь для получения данных с сервера, который заполняет этикетки. Вам нужно создать объект Timer
, который срабатывает за n
секунд до полуночи с интервалом в 1 день, который повторяется бесконечно. Это может выглядеть примерно так:
var midnightTimer: Timer?
midnightTimer = Timer(fire: Date().addingTimeInterval(secondsToMidnight), interval: oneDayInSeconds, repeats: true) { (timer) in
self.updateLabels()
}
RunLoop.main.add(midnightTimer!, forMode: .common)