我正在编写一个方法,该方法从 Web 服务获取信号,然后将其从 NSDictionary
转换为对象。但如果转换过程中出现错误怎么办?
那么我会返回 RACSignal error:error]
吗?
[signal map:^id(NSDictionary *dictionary) {
NSError *error;
SAMWebServiceResponse *samResponse = [MTLJSONAdapter modelOfClass: SAMWebServiceResponse.class
fromJSONDictionary: dictionary
error: &error];
if (error) {
//TODO: Don't know if this is the way to go.
return [RACSignal error:error];
} else {
return samResponse;
}
}
]
最佳答案
ReactiveCocoa 有一个专门针对这种情况的构造,称为 tryMap:
。检查一下:
[signal tryMap:^id(NSDictionary *dictionary, NSError **errorPtr) {
return [MTLJSONAdapter modelOfClass:SAMWebServiceResponse.class
fromJSONDictionary:dictionary
error:errorPtr];
}]
这假设 modelOfClass:fromJSONDictionary:error:
在发生错误时将返回 nil
- 这是相当标准的 - 但值得检查相关文档以防万一。您现在编写的代码将仅返回该错误信号,这是完全合法的事情(信号的信号是 RAC 的最佳部分),但不是您想要的。
关于ios - ReactiveCocoa-映射方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23110327/