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:
:
- Return
[RACSignal empty]
if you want to fail silently and not throw an error. - Return
[RACSignal error:err]
if you want to rethrow the error after doing something, or perhaps you want to transform the error. - Return some other signal that you want to subscribe to in case the first one errors out.