現在、基本的な演算子を実行していて、combineLatest 演算子の動作の違いに遭遇しました。これがバグなのか、Signal と SignalProducers のバリエーションを理解できていないのか、私にはわかりません。
let (numbersSig, numbersOb) = Signal<Int, NoError>.pipe()
let (lettersSig, lettersOb) = Signal<String, NoError>.pipe()
let signal = combineLatest(numbersSig, lettersSig)
signal.observeNext({value in print(value)})
numbersOb.sendNext(1)
lettersOb.sendNext("A")
lettersOb.sendNext("B")
プロデュース: (1, "A") (1, "B")
しかし、SignalProducers を使用して同等のコードと見なされるものを作成すると、次のようになります。
let numberProducer = SignalProducer<Int, NoError> { (observer, disposable) in
for v in [1] { observer.sendNext(v) }
}
let letterProducer = SignalProducer<String, NoError> { (observer, disposable) in
for v in ["A", "B", "C", "D"] { observer.sendNext(v) }
}
let combinedProducer = combineLatest(numberProducer, letterProducer)
combinedProducer.on(next: {value in print(value) }).start()
出力: (1, "D")
これが責任があると思ったので、私はobserver.sendCompleted()をSignalProducersから意図的に除外しましたが、そうではありません。私は何が欠けていますか?