From the documentation of reactive swift I could understand about Flattening
. Examples of which can be found here. In the section Flattening event streams
everything has been discussed perfectly.
I'm confused about flatmap
. According to the docs, it Maps each event from self to a new producer, then flattens the resulting producers according to strategy - concat/merge/latest
. So, it should be similar to flattening
I guess.
But, I could not generate a similar behavior. For example consider the following code segment. If I change the flattening strategy like concat/merge/latest
, the output does not change.
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()
Output:
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
Can anyone clear this up?
Moreover, can any examples be provided about flatmap
differentiating the effect of merge, concat, latest
?