Oi,
Eu tenho uma matriz de solicitações de rede signalProducers e cada saída de uma string e gostaria de combiná-los em um signalProducer que produz uma matriz de string (converter [SignalProducer<String, NSError>]
em SignalProducer<[String], NSError>
)
Eu procurei e encontrei combineLatest
, mas resulta em uma tupla. Existe alguma maneira de torná-lo um array? Desde já, obrigado.
SignalProducerProtocol.merge
e collect
devem fazer o trabalho.
@andersio Mas eu quero preservar a ordem da matriz original de signalProducers no signalProducer combinado. collect
parece coletar os valores na ordem em que os eventos são disparados.
@andersio eu escrevo atualmente como
arrayOfSignalProducers.reduce(SignalProducer<[String], NSError>.init(value: [])) { (combined, s) in
return combined.combineLatestWith(s).map({ (arr, str) in
return arr + [str]
})
}
mas parece feio
Você pode usar a estratégia de concatenação, o que reforçaria o pedido. No entanto, você deve observar que o início do produtor também seria serializado. Se você precisa que eles aconteçam em paralelo, você pode precisar usar merge
e, de alguma forma, reordená-los eventualmente.
SignalProducer(values: [...]).flatten(.Concat).collect()
@andersio , sinto muito não ter desistido. Você pode ilustrar a abordagem flatten
um pouco com um código mais concreto? E estou usando RAC4, deveria ser flatMap? Muito obrigado !
SignalProducer(values: [producerA, producerB, producerC]).flatten(.Concat)
criaria um produtor nivelado, que inicia e encaminha valores de producerB
após producerA
concluído, etc.
flatMap
é apenas uma abreviação de map
+ flatten
.
Comentários muito úteis
SignalProducer(values: [producerA, producerB, producerC]).flatten(.Concat)
criaria um produtor nivelado, que inicia e encaminha valores deproducerB
apósproducerA
concluído, etc.flatMap
é apenas uma abreviação demap
+flatten
.