我正在運行基本操作符,並遇到combineLatest操作符行爲的差異。我不確定這是一個錯誤還是我無法理解Signals和SignalProducers之間的差異。combineLatest行爲中的差異信號v SignalProducer(ReactiveCocoa 4)
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的,因爲我認爲這會負責,但事實並非如此。我錯過了什麼?