0

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

startedSignal.observeNext { _ in
  // Do stuff
}

我基本上想等待几秒钟,然后如果startedSignal不发送任何下一个值,则执行其他操作。我查看了文档并看到了类似retryonSignalProducer但我不确定如何使用它来实现这一点,因为startedSignal它没有完成或发送错误。

4

2 回答 2

5

如果Rex您有一些更高级的用例并且您不想自己实现此逻辑,这很有用,但您实际上可以使用现有的运算符 in 执行此操作ReactiveCocoa,使用timeoutWithErrorand flatMapErroror的组合retry

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

  // Somewhere else:
  private enum Error: ErrorType {
    case Timeout
  }
于 2016-02-08T19:33:27.123 回答
3

我认为雷克斯的超时是你想要的。它看起来像这样:

let alternative: Event<String, NoError> = ...

startedSignal.timeoutAfter(1.0, event: alternative, onScheduler: UIScheduler()).observeNext { _ in
  // Do stuff
}
于 2016-02-07T20:26:18.130 回答