我正在使用ReactiveCocoa 4.0和Swift。我在视图控制器中订阅了startedSignal
类型为Signal<String, NoError>
的信号。
startedSignal.observeNext { _ in
// Do stuff
}
我基本上想要等待几秒钟,然后在startedSignal
未发送任何下一个值时执行其他操作。我查看了文档并在retry
上查看了SignalProducer
之类的内容,但我不确定如何使用startedSignal
来完成或发送错误。< / p>
答案 0 :(得分:5)
如果你有一些更高级的用例并且你不想自己实现这个逻辑,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
}
答案 1 :(得分:3)
我认为Rex's timeout就是你想要的。它看起来像这样:
let alternative: Event<String, NoError> = ...
startedSignal.timeoutAfter(1.0, event: alternative, onScheduler: UIScheduler()).observeNext { _ in
// Do stuff
}