我有一个简单的问题,但我无法找到一个很好的解决方案。
我有一个发送字符串的信号,后面有一个map
。 map
将字符串转换为JSON。
可能会发生字符串格式错误且JSON解析器无法解析错误。
[stringGeneratorSignal map:^(NSString *bussinessObjectString){
NSError *error;
BussinessObject *obj = [[BussinessObject alloc] initWithString:bussinessObjectString error:&error];
if (error) {
NSLog(@"%@", error);
}
return obj;
}];
但是因为我在地图内部,我无法返回错误信号。我想要的是获得解析器提供的错误的错误。
我已经分析了一些我不喜欢的可能性:
flattenMap
。这将允许返回错误消息,但问题是它与map
的行为不同。这种情况的最佳方法是什么?
谢谢!
答案 0 :(得分:1)
看看-tryMap。它允许您返回数据或nil,然后设置错误
/// Runs `mapBlock` against each of the receiver's values, mapping values until
/// `mapBlock` returns nil, or the receiver completes.
///
/// mapBlock - An action to map each of the receiver's values. The block should
/// return a non-nil value to indicate that the action was successful.
/// This block must not be nil.
///
/// Example:
///
/// // The returned signal will send an error if data cannot be read from
/// // `fileURL`.
/// [signal tryMap:^(NSURL *fileURL, NSError **errorPtr) {
/// return [NSData dataWithContentsOfURL:fileURL options:0 error:errorPtr];
/// }];
///
/// Returns a signal which transforms all the values of the receiver. If
/// `mapBlock` returns nil for any value, the returned signal will error using
/// the `NSError` passed out from the block.
- (RACSignal *)tryMap:(id (^)(id value, NSError **errorPtr))mapBlock;