Повторите после задержки, если сигнал не будет отправлен в ReactiveCocoa 4
Я использую ReactiveCocoa 4.0 с Swift. У меня есть сигнал называется startedSignal
типа Signal<String, NoError>
что я подписываюсь в контроллере представления.
startedSignal.observeNext { _ in
// Do stuff
}
Я в основном хочу подождать несколько секунд, а затем сделать что-то еще, если startedSignal
не отправляет никаких следующих значений. Я посмотрел на документы и увидел такие вещи, как retry
на SignalProducer
но я не уверен, как это можно использовать для достижения этой цели, учитывая, что startedSignal
не завершить или отправить ошибки.
2 ответа
В то время как Rex
полезно, если у вас есть более сложные варианты использования, и вы не хотите реализовывать эту логику самостоятельно, вы можете сделать это с помощью существующих операторов в ReactiveCocoa
, используя комбинацию timeoutWithError
а также flatMapError
или же retry
:
signal
.promoteErrors(Error.self)
.timeoutWithError(
.Timeout,
afterInterval: interval,
onScheduler: QueueScheduler()
)
.flatMapError { error in
return anotherProducer
}
// Somewhere else:
private enum Error: ErrorType {
case Timeout
}
Я думаю, что время ожидания Рекса - то, что вы хотите. Это будет выглядеть так:
let alternative: Event<String, NoError> = ...
startedSignal.timeoutAfter(1.0, event: alternative, onScheduler: UIScheduler()).observeNext { _ in
// Do stuff
}