如何将Signal和SignalProducer合并到ReactiveSwift中的Signal中?

时间:2017-05-29 09:47:25

标签: swift reactive-programming reactive-swift

如何将Signal和SignalProducer合并到ReactiveSwift中的Signal?

以下是我到目前为止的情况。我无法弄清楚如何在第3行获得Signal

let (signalA, observerA) = Signal<String, NoError>.pipe()
let signalProducer = /* some signalproducer */
let signalFromSignalProducer == /* how to get a signal from signalProducer here??? */
let mergedSignal = Signal.merge([signalA, signalFromSignalProducer])

我看过这个startWithSignal方法

 public func startWithSignal(_ setup: (ReactiveSwift.Signal<Value, Error>, Disposable) -> Swift.Void)

但需要关闭。为什么它不能只返回信号?我不想为每个需要信号的signalProducer创建另一个嵌套闭包。什么。

我是ReactiveSwift的新手,说实话,这是我遇到的最令人困惑的框架

1 个答案:

答案 0 :(得分:2)

Reactive-Swift有start overload that takes an observer as a parameter,所以我认为通过调用merge可以达到与signalProducer.start(observerA)相同的效果。这应该通过signalA发送所有产生的信号的事件。

至于为什么这样做:startWithSignal采用闭包,以便您可以在开始发送任何事件之前连接生成的信号。如果它刚刚返回一个信号,则可能会在您调用start的时间和连接它的时间之间错过事件,具体取决于相关的生产者。 This answer给出了一个例子。