SWIFT/RxSwift

RxSwift 기본정리2(Traits)

KataRN 2022. 12. 12. 00:23
반응형

안녕하세요. 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