HTML Diff
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