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.
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
.
Comentario más útil
SignalProducer(values: [producerA, producerB, producerC]).flatten(.Concat)
crearía un productor plano, que inicia y reenvía valores deproducerB
después de queproducerA
finalice, etc.flatMap
es solo una abreviatura demap
+flatten
.