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