[RxSwift] RxSwift에서는 에러 처리를 어떻게 할까?
2024. 4. 13. 15:47ㆍiOS Development/RxSwift
앱에서 가장 흔하게 발생할 수 있는 에러 상황은
- 인터넷 연결 없음(오프라인 상태),
- 잘못된 입력(잘못된 타입, 길이, 크기, 내용 등)
- API, HTTP 에러(400, 500, JSON Codable 등)
등이 있다. 그렇다면 RxSwift에서는 이런 에러 상황에서 어떻게 처리를 할까?
RxSwift의 에러 관리
catch
에러를 잡아서 처리
클로저를 받아서 새로운 형태의 Observable를 반환함
func catch(_ handler:) → RxSwift.Observable<Self.Element>
enum MyError: Error {
case anError
case criticalError
}
Observable.create {
$0.onError(MyError.anError) // 오류 발생
return Disposables.create()
}
.catch { error in
switch error as! MyError {
case .anError:
return .just("어떤 오류")
case .criticalError:
return .just("치명적인 오류")
}
}
.subscribe {
print($0) // "어떤 오류" 출력
}
.disposed(by: disposeBag)
catchAndReturn
에러를 무시하고 이전에 선언해 둔 값을 반환함 → 모든 에러에 대해 동일한 값 반환
func catchAndReturn(_ element: Self.Element) → RxSwift.Observable<Self.Element>
Observable.create {
$0.onError(MyError.anError)
return Disposables.create()
}
.catchAndReturn("에러 싫어")
.subscribe {
print($0) // "에러 싫어" 출력
// next("에러 싫어")
// completed
}
.disposed(by: disposeBag)
retry
에러 발생 시 특정 횟수나 상황이 발생할 때까지 계속 재시도시켜서 원하는 결과로 반환
func retry() → RxSwift.Observable<Self.Element>
Observable.create {
$0.onError(MyError.anError)
return Disposables.create()
}
.retry()
.subsribe {
print($0)
}
.disposed(by: disposeBag)
retry(_ maxAttemptCount:)
재시도 횟수 제한함
'iOS Development > RxSwift' 카테고리의 다른 글
[RxSwift] Rx와 MVVM의 찰떡궁합 케미 (0) | 2024.04.13 |
---|---|
[RxSwift] Cocoa Framework 판에 RxCocoa의 등장이라 (0) | 2024.04.12 |
[RxSwift] 대표적인 Operator에 대해서 알아보기 (0) | 2024.04.12 |
[RxSwift] RxSwift로 네트워크 통신 구현하기 (0) | 2024.04.12 |
[RxSwift] Observable, Trait, Subject (0) | 2024.04.12 |