我目前正在运行基本运算符,并遇到了 combineLatest 运算符的行为差异。我不确定这是一个错误还是我未能理解 Signals 和 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 之外,因为我认为这是负责任的,但事实并非如此。我错过了什么?