[RxSwift] Traits: Completable , Maybe

임주희·2022년 12월 23일
0

RxSwift

목록 보기
5/5

Completable

Completable는 Observable의 변형으로 completed와 error 만을 방출 한다.

completed와 error 만을 방출하고 어떠한 값도 방출하지 않기 때문에, 작업이 완료되었다는 사실만 고려하고 별도의 값이 필요하지 않는 경우 사용하기 좋다.

예를 들어, 블로그 글쓰기에서 유저가 글을 쓰는 동안 백그라운드에서 자동 저장(임시 저장)을 진행할 경우, 저장되었는지 안되었는지만 알면 되기 때문에 별도의 값 없이 완료, 에러 여부만 방출하는 completable을 사용하기 좋다.

Completable.create { completable in
    completable(.completed)
    return Disposables.create()
}
.subscribe(onCompleted: {
    print("completed")
}, onError: {
    print("error: \($0.localizedDescription)")
}, onDisposed: {
    print("disposed")
})
.disposed(by: disposeBag)

Maybe

Maybe는 Single과 Completable 사이에 있는 Observable의 변형으로,

  • 단일 요소를 내보내면서 완료하거나
  • 요소를 내보내지 않고 완료하거나
  • 또는 오류를 내보낼 수 있다.

→ 요소를 내보낼 수 있지만 반드시 요소를 내보낼 필요는 없는 작업에 사용할 수 있다.


Maybe<String>.create { maybe in
    maybe(.success("maybe"))  //값을 방출하며 완료
    
    //OR
    maybe(.completed) // 값을 방출하지 않고 완료
    
    //OR
    maybe(.error(error)) // 에러를 방출
    return Disposables.create {}
}
.subscribe(onSuccess: {
    print($0)
},onError: {
    print($0)
},onCompleted: {
    print("completed")
},onDisposed: {
    print("disposed")
})
.disposed(by: disposeBag)    

.asMaybe() 를 통해 만들 수도 있다.
Observable<Result<String, Error>>
    .create({ observer in
        observer.onCompleted()
        return Disposables.create()
    })
    .asMaybe()
    .subscribe(onSuccess: {
        print("success: \($0)")
    }, onError: {
        print("error: \($0.localizedDescription)")
    }, onCompleted: {
        print("completed")
    }, onDisposed: {
        print("disposed")
    })
    .disposed(by: disposeBag)

[출처] reactivex.io
[출처] ReactiveX/RxSwift: Reactive Programming in Swift - GitHub

0개의 댓글