ReactiveCocoa-concat压平策略未按预期工作



我从几天开始学习反应可可,今天我在玩反应可可的扁平化方法(reactiveSwift),我尝试执行文档Basic操作符中为concat扁平化提供的片段。以下是片段:

let (lettersSignal, lettersObserver) = Signal<String, NoError>.pipe()
let (numbersSignal, numbersObserver) = Signal<String, NoError>.pipe()
let (signal, observer) = Signal<Signal<String, NoError>, NoError>.pipe()
signal.flatten(.concat).observeValues { print($0) }
observer.send(value: lettersSignal)
observer.send(value: numbersSignal)
observer.sendCompleted()
numbersObserver.send(value: "1")    // nothing printed
lettersObserver.send(value: "a")    // prints "a"
lettersObserver.send(value: "b")    // prints "b"
numbersObserver.send(value: "2")    // nothing printed
lettersObserver.send(value: "c")    // prints "c"
lettersObserver.sendCompleted()     // prints "1, 2"
numbersObserver.send(value: "3")    // prints "3"
numbersObserver.sendCompleted()

根据文档和交互式可视化图(RAC弹珠-压平(.concat)可视化图),输出应该是这样的,

首先,它应该打印字母流,即

a,b,c

&一旦letterStream完成,它就应该打印数字流,即

1,2,3

所以这个观察的最终输出应该是

[a,b,c,1,2,3]

然而,我看到的级联输出是,

[a,b,c,3]

为什么会这样?为什么只打印numberStream的最新值?而不是在字母流完成后打印整个数字流值。

如果我误解了什么,请告诉我。干杯

正如ReactiveSwift的松弛通道中所提到的,这是预期的结果。

引用文件:

开始观察外部事件流。在前一个事件流完成之前,不会观察到每个后续事件流。

因此,一旦lettersObserver完成,numbersSignal将只发送值。

相关内容

  • 没有找到相关文章

最新更新