Efeito colateral pós-evento RACSignal

Aqueles de vocês usando ReactiveCocoa e sinais provavelmente sabe sobre injeção de efeitos colaterais em sinais de dutos utilizando -doNext:, -doCompleted:, -doError:. O framework irá executar o bloco dado a esses métodos e então propagar o evento correspondente para frente.

Às vezes, no entanto, você deseja inserir um efeito colateral após a propagação do evento. Aqui está um exemplo: suponha que você esteja RACSignalenviando mensagens de erro como alguma ação sendo executada ou nilquando a mensagem de erro deve ser descartada. Você vincula essa mensagem a alguma UILabelpropriedade de texto de:

RAC(self, someLabel.text) = errorMessagesSignal;

Agora, você deseja injetar um pedaço de código adicionando animação de fade cada vez que o texto muda. Mas você não pode injetar isso como -doNext:efeito colateral, porque assim a animação será adicionada ao estado anterior do rótulo e você não verá o novo texto aparecer.

Aqui está um truque para injetar efeito colateral após o novo texto ser definido para esse rótulo:

RAC(self, someLabel.text) = [errorMessageSignal flattenMap:^RACStream *(id value) {
return [[RACSignal return:value] doCompleted:^ {
<side effect here>
}]
}];

Nesse caso, o novo valor proveniente de errorMessageSignalserá enviado por completo, defina a propriedade de texto dos rótulos e, em seguida, o efeito colateral será executado.