Я использовал приведенную ниже структуру, чтобы предупредить пользователя о медленном сетевом соединении.
Когда функция собирается позвонить на сервер, она создает ResponseTimer. Это устанавливает отложенное уведомление, которое срабатывает только если responseTimer var isOn = true. Когда моя функция get ответит от сервера, установите responseTimer.isOn = false.
Вот структура:
struct ResponseTimer {
var isOn: Bool
init() {
self.isOn = true
self.setDelayedAlert()
}
func setDelayedAlert() {
let timer = DispatchTime.now() + 8
DispatchQueue.main.asyncAfter(deadline: timer) {
if self.isOn {
NotificationCenter.default.post(name: NSNotification.Name(rawValue: toastErrorNotificationKey), object: self, userInfo: ["toastErrorCase" : ToastErrorCase.poorConnection])
}
}
}
А вот как бы я это использовал
func getSomethingFromFirebase() {
var responseTimer = ResponseTimer()
ref.observeSingleEvent(of: .value, with: { snapshot in
responseTimer.isOn = false
//do other stuff
})
}
Даже в тех случаях, когда ответ возвращается до истечения 8-секундной задержки, уведомление все равно срабатывает. Что я здесь не так делаю ??? Есть ли лучший образец для использования для чего-то вроде этого?
Спасибо за помощь!