如何使用反应性可可 5 或 6 链接信号生成器或信号生成器序列?

coo*_*lly 0 cocoa reactive-programming reactive-cocoa swift reactive-swift

我几乎是 ReactiveCocoa/ReactiveSwift 的菜鸟。我有两个 SignalProducers。如果第一个 SignalProducer 返回 nil,那么我想执行第二个 SignalProducer,否则不执行。我阅读了文档,但我不确定哪种语法可以帮助我完成这样的工作。任何帮助都受到高度赞赏。

MeX*_*eXx 5

好的,所以你想从第一个 SignalProducer 获取值,只要这些值不为零。然后,您希望从第二个 SignalProducer 中获取值。如果这样说,它已经告诉您需要哪些运算符:take(while:)then

let producerA: SignalProducer<Int?, NoError>
let producerB: SignalProducer<Int?, NoError>

...

producerA
  .take(while: { $0 != nil })
  .then(producerB)
Run Code Online (Sandbox Code Playgroud)

take(while:)只要给定的块返回 true ,操作符就会转发所有事件。因此,在这种情况下,只要事件为零,块就会返回 false 并且结果 SignalProducer 完成。

then运营商还从转发事件producerA,直到producerA完成,此时producerB开始,现在从事件producerB被转发。