[RxSwift] 7. Error Handling

miori·2022년 2월 19일
0

RxSwiftBasic

목록 보기
17/29

RxSwift를 21일간 공부하는 루틴
"Rx를 기깔나게 쓰는 신입개발자 도전" 시작 🚀


Error Handling

프로그램을 구현할 때, 에러 핸들링은 중요하다고 생각한다.
왜냐하면 발생할 수 있는 에러에 대응하지 못하면 유저가 서비스를 이용할 때 불편함을 겪고, 좋은 품질을 제공하지 못하기 때문이다.

swift 를 사용하면서 Result<Value, Error> 를 활용해 성공일 때는 , 현재 작업의 결과값을 저장할 수 있고, 실패일때는, 에러를 저장할 수 있다.

RxSwift 에서도 에러핸들링 연산자를 제공해 주는데 오늘은 이부분에 대해 정리해 보겠다.

- Catch

정의

catch 정의

catch 연산자를 보게되면 에러가 파라미터인 클로저를 파라미터로 받고, 이 클로저는 Observable을 return 하게 된다.

catch 연산자는 source observable이 next나 completed 이벤트를 방출하면 그대로 전달하지만, 만약 error 이벤트를 방출하게 되면, source observable을 반환된 새로운 observable로 대체하게 된다.

코드

let source = PublishSubject<Int>()
let recovery = BehaviorSubject<Int>(value: 0)

source
    .catch { _ in recovery }
    .subscribe { print($0) }
    .disposed(by: disposeBag)

source.onError(Err.err)

위의 코드 처럼 source observable 이 error 이벤트를 전달했을때, catch 연산자를 통해 recovery observable로 대체 할 수 있다.

만약 source.onError(Err.err) 처럼 에러가 발생하지 않고, 정상적으로 next 이벤트를 source.onNext(1) 처럼 전달했다면, next(1)이 출력이 될 것이다. 하지만 source.onError(Err.err) 처럼 에러 이벤트를 전달했기에 대체 observable인 recovery 의 next(0)이 전달이 된다.

profile
iS를 공부하는 miori 입니다.

0개의 댓글

관련 채용 정보