【问题标题】:How do I merge a Signal and a SignalProducer into a Signal in ReactiveSwift?如何在 ReactiveSwift 中将 Signal 和 SignalProducer 合并为 Signal?
【发布时间】:2017-05-30 23:51:28
【问题描述】:

如何在 ReactiveSwift 中将 Signal 和 SignalProducer 合并为 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 的新手,老实说,这是我遇到过的最令人困惑的框架

【问题讨论】:

  • startWithSignal 需要一个闭包,这样您就可以在它开始发送任何事件之前连接产生的信号。如果它只是返回一个信号,则可能会在您调用start 和您连接它的时间之间错过事件,具体取决于相关的生产者。您能否在此处添加有关您要执行的操作的更多详细信息?可能有一种更惯用的设置方式,不需要像这样使用startWithSignal

标签: swift reactive-programming reactive-swift


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多