gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 06:17:25 25 4
gpt4 key购买 nike

我从几天开始学习 reactive-cocoa,今天我在玩 reactivecocoa (reactiveSwift) 的 flatten 方法,我尝试执行为 concat flattening 给出的片段文档 Basic operators .这是片段:

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 marbles - flatten(.concat) visual diagram ,输出应该是这样的,

首先它应该打印字母流即

a, b, c

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

1, 2, 3

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

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

但是,我看到的串联输出是,

[a, b, c, 3]

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

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

最佳答案

ReactiveSwift's slack channel 中所述,这是预期的结果。

Quoting the documentation :

The outer event stream is started observed. Each subsequent event stream is not observed until the preceeding one has completed.

所以 numbersSignal 只会在 lettersObserver 完成后发送值。

关于ios - ReactiveCocoa - concat 展平策略未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41480761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com