Reactivecocoa: Combine una serie de señales en una

Creado en 29 ago. 2016  ·  6Comentarios  ·  Fuente: ReactiveCocoa/ReactiveCocoa

Hola,

Tengo una serie de solicitudes de red SignalProducers y cada una genera una cadena y me gustaría combinarlas en una signalProducer que genera una matriz de cadenas (convierte [SignalProducer<String, NSError>] en SignalProducer<[String], NSError> )

Busqué y encontré combineLatest , pero resultó en una tupla. ¿Hay alguna forma de convertirlo en una matriz? Gracias por adelantado.

question

Comentario más útil

SignalProducer(values: [producerA, producerB, producerC]).flatten(.Concat) crearía un productor plano, que inicia y reenvía valores de producerB después de que producerA finalice, etc.

flatMap es solo una abreviatura de map + flatten .

Todos 6 comentarios

SignalProducerProtocol.merge y collect deberían hacer el trabajo.

@andersio Pero quiero preservar el orden de la matriz original de signalProducers en el signalProducer combinado. collect parece recopilar los valores en el orden en que se activan los eventos.

@andersio lo escribo actualmente como

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

pero se ve feo

En su lugar, puede utilizar la estrategia de concatenación, que haría cumplir la orden. Sin embargo, debe tener en cuenta que el inicio del productor también se serializaría. Si necesita que sucedan en paralelo, es posible que deba usar merge y, de alguna manera, reordenarlos eventualmente.

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

@andersio lamento no haber dejado de entenderlo. ¿Puede ilustrar un poco el enfoque flatten un código más concreto? Y estoy usando RAC4, ¿debería ser flatMap? Muchas gracias !

SignalProducer(values: [producerA, producerB, producerC]).flatten(.Concat) crearía un productor plano, que inicia y reenvía valores de producerB después de que producerA finalice, etc.

flatMap es solo una abreviatura de map + flatten .

¿Fue útil esta página
0 / 5 - 0 calificaciones