2017-05-29 46 views
0

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

以下是我到目前为止。我无法弄清楚如何在第3行

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]) 

得到Signal我看了这个startWithSignal方法

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

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

我是新来ReactiveSwift和诚实,这是我曾经遇到

+0

'startWithSignal'需要关闭,以便在开始发送任何事件之前就可以连接产生的信号。如果它刚刚返回了一个信号,则可能会在您调用“开始”的时间到您挂钩的时间之间错过事件,具体取决于所讨论的制作者。你能否在这里添加更多关于你想要做什么的细节?有一种更习惯的方式来设置它,不需要像这样使用'startWithSignal'。 – jjoelson

回答

1

ReactiveSwift有start overload that takes an observer as a parameter最困惑的框架,所以我觉得你可以通过调用signalProducer.start(observerA)实现为merge同样的效果。这应该通过signalA发送所有生成的信号事件。

至于为什么这样做:startWithSignal需要一个闭包,以便在开始发送任何事件之前连线生成的信号。如果它刚刚返回一个信号,则可能会错过开始通话和挂机之间的事件,具体取决于相关制作人。 This answer举了一个例子。