我正在编写一种方法,该方法从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;
}
}
]
答案 0 :(得分:3)
ReactiveCocoa有一个名为tryMap:
的情况。看看:
[signal tryMap:^id(NSDictionary *dictionary, NSError **errorPtr) {
return [MTLJSONAdapter modelOfClass:SAMWebServiceResponse.class
fromJSONDictionary:dictionary
error:errorPtr];
}]
这假定modelOfClass:fromJSONDictionary:error:
会在发生错误时返回nil
- 这是非常标准的 - 但是为了以防万一,值得检查文档。你现在编写的代码只会返回错误信号,这是完全合法的事情(信号的信号是RAC的最佳部分),但不是你想要的。