如果在ReactiveCocoa 4中未发送信号,则在延迟后重试

Red*_*den 0 reactive-cocoa swift reactive-cocoa-4

我正在使用ReactiveCocoa 4.0和Swift.我有一个叫做startedSignal类型的信号Signal<String, NoError>,我在视图控制器中订阅.

startedSignal.observeNext { _ in
  // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

我基本上想要等待几秒钟,如果startedSignal不发送任何下一个值,则执行其他操作.我查看了文档并查看了类似的内容retry,SignalProducer但我不确定如何实现这一点,因为startedSignal它没有完成或发送错误.

Nac*_*oto 5

虽然Rex如果你有一些更高级的用例并且你不想自己实现这个逻辑,但是你可以使用现有的运算符来实现这一点ReactiveCocoa,使用timeoutWithErrorflatMapErroror 的组合retry:

signal
   .promoteErrors(Error.self)
   .timeoutWithError(
      .Timeout, 
      afterInterval: interval,
      onScheduler: QueueScheduler()
   )
   .flatMapError { error in
      return anotherProducer
   }

  // Somewhere else:
  private enum Error: ErrorType {
    case Timeout
  }
Run Code Online (Sandbox Code Playgroud)