【问题标题】:RAC 4.0 How to chain SignalProducers correctly?RAC 4.0 如何正确链接 SignalProducers?
【发布时间】:2016-03-13 13:58:00
【问题描述】:

我有一个视图模型,其中包含几个不同的功能,如下所示:

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 是用于这种行为的函数。 Signal3 不应该在 Signal2 完成之前开始,它不应该在 Signal1 完成之前开始。

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

我在哪里做错了?

【问题讨论】:

  • 您从中看到了什么错误?
  • 我是一个布偶,并且在 SignalProducer 块之外检查了一个期望非零的属性。当然,该函数在实际执行块之前返回 SignalProducer。虚惊一场,都修好了!

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


【解决方案1】:

看起来是对的!

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

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

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

【讨论】:

    猜你喜欢
    • 2012-11-14
    • 2016-09-17
    • 1970-01-01
    • 2016-01-17
    • 2011-12-19
    • 2018-04-17
    • 1970-01-01
    • 2023-04-03
    • 2017-10-18
    相关资源
    最近更新 更多