0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Как бы хорошо вы не программировали, без работы над ошибками не обойтись. Давайте рассмотрим основные методы, позволяющие эту работу выполнять при программировании под iOS с помощью фреймворка RxSwift.</p>
1
<p>Как бы хорошо вы не программировали, без работы над ошибками не обойтись. Давайте рассмотрим основные методы, позволяющие эту работу выполнять при программировании под iOS с помощью фреймворка RxSwift.</p>
2
<h2>catchError</h2>
2
<h2>catchError</h2>
3
<p>Даёт возможность перехватывать сгенерированную ошибку из SO, меняя её на новый Observable, который станет генерировать элементы.</p>
3
<p>Даёт возможность перехватывать сгенерированную ошибку из SO, меняя её на новый Observable, который станет генерировать элементы.</p>
4
<p>После генерации очередного элемента произошла генерация ошибки, однако удалось её перехватить, вернув взамен новый Observable.</p>
4
<p>После генерации очередного элемента произошла генерация ошибки, однако удалось её перехватить, вернув взамен новый Observable.</p>
5
<h2>catchErrorJustReturn</h2>
5
<h2>catchErrorJustReturn</h2>
6
<p>Даёт возможность перехватывать сгенерированную ошибку из SO, меняя её на указанный элемент, далее SO генерирует Completed.</p>
6
<p>Даёт возможность перехватывать сгенерированную ошибку из SO, меняя её на указанный элемент, далее SO генерирует Completed.</p>
7
<p>Итак, после того, как произошла генерация очередного элемента, была сгенерирована и ошибка, однако она была перехвачена с возвращением взамен нового элемента.</p>
7
<p>Итак, после того, как произошла генерация очередного элемента, была сгенерирована и ошибка, однако она была перехвачена с возвращением взамен нового элемента.</p>
8
<h2>retry</h2>
8
<h2>retry</h2>
9
<p>Даёт возможность перехватывать сгенерированные ошибки из SO и, с учётом переданного параметра, происходит попытка запустить SO сначала и нужное количество раз. Ожидается, что ошибка не повторится.</p>
9
<p>Даёт возможность перехватывать сгенерированные ошибки из SO и, с учётом переданного параметра, происходит попытка запустить SO сначала и нужное количество раз. Ожидается, что ошибка не повторится.</p>
10
<p>Целое число, передаваемое в оператор, означает число попыток дождаться успешного окончания. Ноль - значит ни одной попытки, то есть цепочка не запустится ни разу, а просто произойдет completed-событие. Единица предполагает такое же поведение, при котором оператор как бы и не применялся. Два - значит исходная попытка, плюс дополнительная и так далее. Если же мы не передадим в оператор параметр, число попыток станет бесконечным.</p>
10
<p>Целое число, передаваемое в оператор, означает число попыток дождаться успешного окончания. Ноль - значит ни одной попытки, то есть цепочка не запустится ни разу, а просто произойдет completed-событие. Единица предполагает такое же поведение, при котором оператор как бы и не применялся. Два - значит исходная попытка, плюс дополнительная и так далее. Если же мы не передадим в оператор параметр, число попыток станет бесконечным.</p>
11
<h2>retryWhen</h2>
11
<h2>retryWhen</h2>
12
<p>Даёт возможность перехватывать сгенерированную ошибку из SO и, с учётом типа ошибки, мы или повторно генерируем ошибку, пробрасываемую в RO (на этом выполнение оканчивается), или генерируем Observable (tryObservable), генерация каждого корректного элемента которого осуществит повторную подписку на SO с надеждой, что ошибка пропадёт. Если же tryObservable окончится ошибкой, она пробросится в RO, причём на этом выполнение окончится.</p>
12
<p>Даёт возможность перехватывать сгенерированную ошибку из SO и, с учётом типа ошибки, мы или повторно генерируем ошибку, пробрасываемую в RO (на этом выполнение оканчивается), или генерируем Observable (tryObservable), генерация каждого корректного элемента которого осуществит повторную подписку на SO с надеждой, что ошибка пропадёт. Если же tryObservable окончится ошибкой, она пробросится в RO, причём на этом выполнение окончится.</p>
13
<p>В нашем примере инкремент переменной i встроен в генерацию sequenceWithError. Это сделано для того, чтобы на третьей попытке ошибка исчезла. Если же раскомментировать генерацию ошибки RxError.Overflow, мы не перехватим её в операторе retryWhen, пробросив в RO.</p>
13
<p>В нашем примере инкремент переменной i встроен в генерацию sequenceWithError. Это сделано для того, чтобы на третьей попытке ошибка исчезла. Если же раскомментировать генерацию ошибки RxError.Overflow, мы не перехватим её в операторе retryWhen, пробросив в RO.</p>
14
<p><em><a>Источник</a></em></p>
14
<p><em><a>Источник</a></em></p>
15
15