Создайте RACSignal, который отправляет ошибку, если RACSignal отправляет следующий

С ReactiveCocoa я уверен, что есть лучший способ, чем сделать это?

RACSignal *crashSignal = [cancelSignal tryMap:^id(id value, NSError **errorPtr) {
    *errorPtr = [self createError];
    return nil;
}];

person hfossli    schedule 12.02.2014    source источник


Ответы (1)


Более идиоматично было бы:

RACSignal *crashSignal = [cancelSignal flattenMap:^(id value) {
    return [RACSignal error:[self createError]];
}];
person joshaber    schedule 12.02.2014
comment
Я никогда не понимал flattenMap. Не могли бы вы сказать несколько строк о том, когда это полезно и почему оно широко используется в RAC? - person hfossli; 12.02.2014
comment
@hfossli -flattenMap: позволяет сопоставлять значение с сигналом. Результирующие сигналы (от отображения каждого значения в оригинале) будут автоматически объединены вместе. В случае, который вы описываете, вставка NSError значения в сигнал на самом деле не остановит его, поэтому вы действительно хотите сопоставить с сигналом ошибки, который остановит весь поток, как только он будет объединен. - person Justin Spahr-Summers; 12.02.2014
comment
Теперь имеет смысл!! Большое спасибо! - person hfossli; 13.02.2014