DevPrep

Все темы › Combine

Как в Combine устроены ошибки: Failure, catch, retry и почему поток умирает?

Middle PRO

Суть

У каждого Publisher есть тип Failure, и ошибка в Combine — это не значение, а завершение: .failure(error) — последнее событие потока, после него издатель не пришлёт ничего, а подписка освобождается. Поэтому одна сетевая ошибка внутри цепочки «убивает» её навсегда: пользователь жмёт «Обновить», а запросы больше не уходят.

Операторы обработки ошибок не «чинят» исходный поток — они его заменяют. catch переключается на запасной издатель, replaceError(with:) отдаёт одно значение и завершается, retry(n) заново подписывается на upstream (для холодного издателя это повторный запрос).

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store