J'ai commencé à apprendre réactif-cacao de quelques jours, aujourd'hui je jouais avec la méthode aplatie de la réactivecocoa (reactiveSwift), j'ai essayé d'exécuter l'extrait donné pour le concat aplatissement dans la documentation Basic operators. Voici l'extrait:ReactiveCocoa - concat aplatir stratégie ne fonctionne pas comme prévu
let (lettersSignal, lettersObserver) = Signal<String, NoError>.pipe()
let (numbersSignal, numbersObserver) = Signal<String, NoError>.pipe()
let (signal, observer) = Signal<Signal<String, NoError>, NoError>.pipe()
signal.flatten(.concat).observeValues { print($0) }
observer.send(value: lettersSignal)
observer.send(value: numbersSignal)
observer.sendCompleted()
numbersObserver.send(value: "1") // nothing printed
lettersObserver.send(value: "a") // prints "a"
lettersObserver.send(value: "b") // prints "b"
numbersObserver.send(value: "2") // nothing printed
lettersObserver.send(value: "c") // prints "c"
lettersObserver.sendCompleted() // prints "1, 2"
numbersObserver.send(value: "3") // prints "3"
numbersObserver.sendCompleted()
Selon la documentation et le diagramme de visualisation interactive (RAC marbles - flatten(.concat) visual diagram, la sortie aurait dû être quelque chose comme ça,
D'abord, il aurait dû imprimer à-dire de flux de lettre,
a, b, c
& une fois que le letterStream a terminé, il devrait « Ai imprimé le flux de nombre ie
1, 2, 3
Ainsi, le résultat final de cette observation aurait dû être
[a, b, c, 1, 2, 3]
Cependant, la sortie concaténés je vois est,
[a, b, c, 3]
pourquoi est-ce donc? Pourquoi seule la dernière valeur de numberStream est en cours d'impression? Au lieu d'imprimer les valeurs de flux de nombres entiers une fois que le flux de lettres a été terminé.
S'il vous plaît laissez-moi savoir si j'ai mal compris quelque chose. À votre santé.
Vous l'avez. Merci :) – iamyogish