Reactivecocoa: Combinez un tableau de signaux en un seul

Créé le 29 août 2016  ·  6Commentaires  ·  Source: ReactiveCocoa/ReactiveCocoa

Salut,

J'ai un tableau de requêtes réseau signalProducers et chacun génère une chaîne et je voudrais les combiner en un seul signalProducer qui génère un tableau de chaînes (convertir [SignalProducer<String, NSError>] en SignalProducer<[String], NSError> )

J'ai cherché et trouvé combineLatest , mais il en résulte un tuple. Existe-t-il un moyen d'en faire un tableau ? Merci d'avance.

question

Commentaire le plus utile

SignalProducer(values: [producerA, producerB, producerC]).flatten(.Concat) créerait un producteur aplati, qui démarre et transmet des valeurs de producerB après la fin de producerA , etc.

flatMap n'est qu'un raccourci de map + flatten .

Tous les 6 commentaires

SignalProducerProtocol.merge et collect devraient faire le travail.

@andersio Mais je souhaite conserver l'ordre du tableau d'origine de signalProducers dans le signalProducer combiné. collect ressemble à la collecte des valeurs dans l'ordre dans lequel les événements sont déclenchés.

@andersio je l'écris actuellement comme

arrayOfSignalProducers.reduce(SignalProducer<[String], NSError>.init(value: [])) { (combined, s) in
            return combined.combineLatestWith(s).map({ (arr, str) in
                return arr + [str]
            })
        }

mais ça a l'air moche

Vous pouvez utiliser la stratégie de concaténation à la place, qui appliquerait l'ordre. Cependant, vous devez noter que le démarrage du producteur serait également sérialisé. Si vous avez besoin qu'elles se produisent en parallèle, vous devrez peut-être utiliser merge et éventuellement les réorganiser.

SignalProducer(values: [...]).flatten(.Concat).collect()

@andersio, je suis désolé de ne pas avoir arrêté. Pouvez-vous illustrer un peu l'approche flatten par un code plus concret ? Et j'utilise RAC4, faut-il que ce soit flatMap ? Merci beaucoup !

SignalProducer(values: [producerA, producerB, producerC]).flatten(.Concat) créerait un producteur aplati, qui démarre et transmet des valeurs de producerB après la fin de producerA , etc.

flatMap n'est qu'un raccourci de map + flatten .

Cette page vous a été utile?
0 / 5 - 0 notes