私は数日からリアクティブ ココアを学び始めました。今日、リアクティブ ココア (reactiveSwift) のフラット化メソッドで遊んでいました。ドキュメンテーションBasic operatorでconcat flattening に指定されたスニペットを実行してみました。スニペットは次のとおりです。
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 マーブル - flatten(.concat) 視覚的ダイアグラム )によると、出力は次のようになります。
まず、文字ストリームを出力する必要があります。つまり、
a、b、c
& letterStream が完了すると、数値ストリームが出力されているはずです。
1、2、3
したがって、この観察の最終的な出力は
[a、b、c、1、2、3]
ただし、私が見ている連結出力は、
[a、b、c、3]
これはなぜですか?numberStream の最新の値のみが出力されるのはなぜですか? 文字ストリームが完了したら、数値ストリームの値全体を出力する代わりに。
私が何かを誤解した場合はお知らせください。乾杯。