Reactivecocoa: Combine uma série de sinais em um

Criado em 29 ago. 2016  ·  6Comentários  ·  Fonte: ReactiveCocoa/ReactiveCocoa

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.

question

Comentários muito úteis

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 .

Todos 6 comentários

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 .

Esta página foi útil?
0 / 5 - 0 avaliações