iOS: OperationQueue.schedule(после: Date), который не может быть запущен при изменении даты
Проблема
Мне нужно получить обратный вызов, когда прошло не менее X времени с момента установки даты обратного вызова.
Пример 1: Это сработало бы отлично, но можно запустить выполнение блока, установив дату раньше правильного времени прямо сейчас:
let responseDate = Date().advanced(by: 60) // 1 min
OperationQueue.current.schedule(after: .init(responseDate), {
print("the time is now!") // possible to set the current date 1 min before
}
С другой стороны, решение для получения текущего времени безотказной работы из этого ответа отлично работает, но требует, чтобы таймер постоянно работал, чтобы проверять, близки ли мы к дате.
Можно ли совместить эти два подхода и как-то «привязать» обратный вызов к
Я также ищу альтернативные инженерные решения, которые удовлетворяют двум критериям:
- Не должно быть возможности вызвать обратный вызов, сбросив дату устройства на какое-то произвольное значение в прошлом.
- Если устройство было переведено в спящий режим (например, нажатием боковой кнопки включения / выключения), часы по-прежнему должны «тикать», чтобы метод был вызван, пока приложение работает в фоновом режиме.