ReactiveCocoa- map方法中的错误

时间:2014-04-16 13:04:14

标签: ios objective-c reactive-cocoa

我正在编写一种方法,该方法从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;
    }
  }
]

1 个答案:

答案 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的最佳部分),但不是你想要的。