Difference between catch: and subscribeError:

2019-03-08 11:37发布

问题:

In ReactiveCocoa, what's the difference between the subscribeError: method vs. catch:? Why would you want to return a signal in catch:?

回答1:

-subscribeError: actually subscribes: this is the end of the line. Whereas -catch: simply transforms a signal into a new signal (and doesn't actually subscribe). Think of the signal like a program. When you -subscribeError:, you are telling the computer "I want to run this program, but I only want to hear back from you if it errors out." When you -catch:, you are saying "I've got this program that may throw an error, and I want to make a new one based on the old one that handles that error differently."

The reason you have to return a signal in -catch: is that it is not simply for squelching errors: it is actually for responding to errors. Once the original signal has errored out, it's as good as gone: if you want the resultant signal to keep going after a failure, you have to do give a new signal in -catch:.

Examples of what you could do in -catch::

  1. Return [RACSignal empty] if you want to fail silently and not throw an error.
  2. Return [RACSignal error:err] if you want to rethrow the error after doing something, or perhaps you want to transform the error.
  3. Return some other signal that you want to subscribe to in case the first one errors out.