RAC 4.0如何正确链接SignalProducers?

时间:2015-12-08 15:14:56

标签: ios swift reactive-cocoa reactive-cocoa-3

我有一个视图模型,其中包含几个不同的函数:

func somethingSignal() -> SignalProducer<Void, NSError>
{
    return SignalProducer {
        sink, disposable in

        sink.sendNext(blabla)
        sink.sendCompleted()
    }
}

现在,这些信号需要按顺序运行 - 在完成任务之前无法启动。因此,我有另一个叫做的函数:

func setup() -> SignalProducer<Void, NSError>
{
    return somethingSignal()
         .then(somethingSignal2())
         .then(somethingSignal3())
}

我的印象是then是用于此类行为的函数。在Signal2完成之前,Signal3不应该开始,在Signal1完成之前不应该开始。

调用setup的函数有start()次调用。

我在哪里错了?

1 个答案:

答案 0 :(得分:1)

看起来不错!

或者,您可以连接所有信号:

SignalProducer<SignalProducer<(), NSError>, NSError>(values: [
    somethingSignal(),
    somethingSignal2(),
    somethingSignal3()
])
    .flatten(.Concat)

由于您的类型为Void,因此您可能并不关心所发出的值。但是,如果你这样做,请注意它的语义略有不同:它将从所有信号中发出值,与then不同。