Подтвердить что ты не робот

Разница между catch: и subscribeError:

В ReactiveCocoa, какая разница между методом subscribeError: и catch:? Почему вы хотите вернуть сигнал в catch:?

4b9b3361

Ответ 1

-subscribeError: фактически подписывается: это конец строки. В то время как -catch: просто преобразует сигнал в новый сигнал (и фактически не подписывается). Подумайте о сигнале, как о программе. Когда вы -subscribeError:, вы говорите компьютеру "Я хочу запустить эту программу, но я хочу только услышать от вас, если это ошибка". Когда вы -catch:, вы говорите: "У меня есть эта программа, которая может вызвать ошибку, и я хочу создать новую, основанную на старой, которая обрабатывает эту ошибку по-разному".

Причина, по которой вам нужно вернуть сигнал в -catch:, заключается в том, что она не просто для шумоподавления ошибок: она фактически отвечает за ошибки. Как только исходный сигнал выйдет из строя, он так же хорош, как и ушел: если вы хотите, чтобы результирующий сигнал продолжал идти после сбоя, вам нужно дать новый сигнал в -catch:.

Примеры того, что вы могли бы сделать в -catch::

  • Верните [RACSignal empty], если вы хотите выйти из строя и не выдавать ошибку.
  • Верните [RACSignal error:err], если вы хотите перебросить ошибку после выполнения чего-либо или, возможно, хотите преобразовать ошибку.
  • Возвратите какой-либо другой сигнал, который вы хотите подписаться, если первый из них не работает.