0

Swift で ReactiveCocoa 4.0 を使用しています。ビューコントローラーでサブスクライブするstartedSignalタイプのというシグナルがあります。Signal<String, NoError>

startedSignal.observeNext { _ in
  // Do stuff
}

startedSignal私は基本的に何秒か待ってから、次の値を送信しない場合は何か他のことをしたいと思っています。私はドキュメントを見て、retryonのようなものを見ましたが、エラーを完了または送信しないSignalProducerことを考えると、これを達成するためにどのように使用できるかわかりません。startedSignal

4

2 に答える 2

5

whileRexは、より高度なユースケースがあり、このロジックを自分で実装したくない場合に便利ですが、とまたはReactiveCocoaの組み合わせを使用して、 の既存の演算子で実際にこれを行うことができます。timeoutWithErrorflatMapErrorretry

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 に答える