В ReactiveCocoa, какая разница между методом subscribeError:
и catch:
? Почему вы хотите вернуть сигнал в catch:
?
Разница между catch: и subscribeError:
Ответ 1
-subscribeError:
фактически подписывается: это конец строки. В то время как -catch:
просто преобразует сигнал в новый сигнал (и фактически не подписывается). Подумайте о сигнале, как о программе. Когда вы -subscribeError:
, вы говорите компьютеру "Я хочу запустить эту программу, но я хочу только услышать от вас, если это ошибка". Когда вы -catch:
, вы говорите: "У меня есть эта программа, которая может вызвать ошибку, и я хочу создать новую, основанную на старой, которая обрабатывает эту ошибку по-разному".
Причина, по которой вам нужно вернуть сигнал в -catch:
, заключается в том, что она не просто для шумоподавления ошибок: она фактически отвечает за ошибки. Как только исходный сигнал выйдет из строя, он так же хорош, как и ушел: если вы хотите, чтобы результирующий сигнал продолжал идти после сбоя, вам нужно дать новый сигнал в -catch:
.
Примеры того, что вы могли бы сделать в -catch:
:
- Верните
[RACSignal empty]
, если вы хотите выйти из строя и не выдавать ошибку. - Верните
[RACSignal error:err]
, если вы хотите перебросить ошибку после выполнения чего-либо или, возможно, хотите преобразовать ошибку. - Возвратите какой-либо другой сигнал, который вы хотите подписаться, если первый из них не работает.