The primary method to do this is by using -flattenMap:
, similar to how you've written the -filter:
above. Using your example:
RACSignal *B = [A flattenMap:^(NSNumber *number) {
if (number.intValue == -1) {
return [RACSignal error:[NSError errorWithDomain:@"MyDomain" code:0 userInfo:nil]];
} else {
return [RACSignal return:number];
}
}];
Update
Alternatively, using the newer -try:
operator:
RACSignal *B = [A try:^(NSNumber *number, NSError **error) {
if (number.intValue == -1) {
*error = [NSError errorWithDomain:@"MyDomain" code:0 userInfo:nil];
return NO;
}
return YES;
}];