catch:和subscribeError之间的区别:

时间:2013-10-18 00:34:19

标签: reactive-programming reactive-cocoa

ReactiveCocoa中,subscribeError:方法与catch:之间的区别是什么?为什么要在catch:中返回信号?

1 个答案:

答案 0 :(得分:32)

-subscribeError:实际订阅:这是该行的结尾。而-catch:只是将信号转换为新信号(并且实际上不会订阅)。把信号想象成一个程序。当你-subscribeError:时,你告诉计算机“我想要运行这个程序,但我只想听到它错误的消息。”当你-catch:时,你说“我有这个程序可能会抛出错误,我想根据处理错误的旧程序制作一个新程序。”

您必须在-catch:中返回信号的原因是它不仅仅是为了压制错误:它实际上是为了响应错误。一旦原始信号出错,它就好了:如果你想让结果信号在失败后继续运行,你必须在-catch:中给出一个新的信号。

您可以在-catch:中执行的操作示例:

  1. 如果您想以静默方式失败而不是抛出错误,请返回[RACSignal empty]
  2. 如果您想在做某事后重新抛出错误,或者您想要转换错误,请返回[RACSignal error:err]
  3. 如果第一个错误输出,请返回您想要订阅的其他信号。