从响应式 swift 的文档中,我可以了解Flattening
. 可以在此处找到其中的示例。在该部分中,Flattening event streams
所有内容都已完美讨论。
我很困惑flatmap
。根据文档,它Maps each event from self to a new producer, then flattens the resulting producers according to strategy - concat/merge/latest
. 所以,应该和flattening
我猜的差不多。
但是,我无法产生类似的行为。例如,考虑以下代码段。如果我改变扁平化策略concat/merge/latest
,输出不会改变。
let (numbersSignal, numbersObserver) = Signal<String, NoError>.pipe()
numbersSignal.producer.flatMap(.concat) { value -> SignalProducer<String, NoError> in
print("Outer Signal Producer \(value)")
return SignalProducer<String, NoError> {
observer, lifetime in
print("Inner Signal Producer \(value)")
observer.send(value: "Inner")
observer.sendCompleted()
}
}.observe(on: UIScheduler()).startWithValues { result in
print("Observer \(result)")
}
numbersObserver.send(value: "A")
numbersObserver.send(value: "B")
numbersObserver.send(value: "C")
numbersObserver.sendCompleted()
输出:
Outer Signal Producer A
Inner Signal Producer A
Observer Inner
Outer Signal Producer B
Inner Signal Producer B
Observer Inner
Outer Signal Producer C
Inner Signal Producer C
Observer Inner
任何人都可以清除这个吗?
此外,是否可以提供任何示例来flatmap
区分 的效果merge, concat, latest
?