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?