안녕하세요. KataRN입니다.
오늘은 RxSwift의 기본 Traits에 대해 정리하겠습니다.
RxSwift는 Observable을 사용할 때 명확한 이벤트 발생 규칙을 가질 수 있도록 Traits를 지원한다.
Traits는 RxSwift를 사용할 때 코드를 명확하고 직관성 있게 가지고자 할 때 선택적으로 사용할 수 있으며, 코드의 의도를 확실히 보여줄 수 있다는 장점이 있다.
1. Single : onSuccess(= .next + .completed), onFailure만 처리하면된다, 항상 단일 요소 또는 에러를 방출하도록 보장하는 시퀀스, 주로 HTTP 요청을 처리하는데 사용된다.
Single<Result<String, TraitsError>>.just(.success("✅"))
.subscribe(onSuccess: {
print($0)
}, onFailure: { _ in
print("error")
}, onDisposed: {
print("disposed")
})
.disposed(by: disposeBag)
1-1 Single.create
- Single를 create로 만들때 리턴값은 Disposable이다.
- 그래서 disposed(by: disposeBag)를 하는것.
- decode에 실패하면 .failur를 방출하고 Disposables.create()로 리턴하는 것
Single<SomeJSON>.create { observer -> Disposable in
guard let data = json.data(using: .utf8),
let json = try? JSONDecoder().decode(SomeJSON.self, from: data)
else {
observer(.failur(JSONError.decodingError))
return Disosables.create()
}
observer(.success(json))
return Disposables.create()
}
2. Maybe : onSuccess, onError, onCompleted 3가지 이벤트 방출, Single과 Completable의 중간 특성을 가지는 시퀀스, 단일 요소를 방출하거나 요소를 방출하지 않고 완료할 수 있다.
- completed되어도 값을 방출하지 않는다.
- 상황관리에 사용된다.
- 예시) 어떤 사진앱이있는데 저장 및 삭제시는 next를 방출, 그냥 종료시 .completed 방출, 다른 문제가 발생 시 .error 방출
Maybe<Result<String, TraitsError>>.just(.success("✅"))
.subscribe(onSuccess: {
print("success: \($0)")
}, onError: {
print("error: \($0.localizedDescription)")
}, onCompleted: {
print("completed")
}, onDisposed: {
print("disposed")
})
.disposed(by: disposeBag)
- just로 .success를 넣은 Maybe에 subcribe를 했기 때문에 onSuccess가 방출된다.
3. Completable : completed, error 2가지 이벤트 방출, 단순 완료 여부만 알고 싶을 때 사용한다.
- asSingle이나 asMaybe로 바꿀수없다. .next가 없기 때문
Completable.create { completable in
completable(.error(TraitsError.completable))
return Disposables.create()
}
.subscribe(onCompleted: {
print("completed")
}, onError: {
print("error: \($0.localizedDescription)")
}, onDisposed: {
print("disposed")
})
.disposed(by: disposeBag)
- Completable를 create로 만들고 return Disposables.create()전에 .error를 방출했기 때문에 .subscribe를 하면 .onError가 방출된다.
오늘도 짧게 정리했습니다.
감사합니다.
'SWIFT > RxSwift' 카테고리의 다른 글
Operators 정리 (0) | 2022.12.20 |
---|---|
RxSwift 기본정리3(Subjects) (0) | 2022.12.12 |
RxSwift 기본정리(Observable) (0) | 2022.12.12 |