새소식

iOS/RxSwift

[RxSwift] Traits

  • -

Single


일련의 element를 방출하는 대신 항상 단일 요소 또는 error를 방출하는 것을 보장하는 Observable의 변형

Observable<String>.create{ observer -> Disposable in
    observer.onError(TraitsError.single)
    return Disposables.create()
}.asSingle()
    .subscribe(onSuccess: {
        print($0)
    }, onFailure: {
        print("error : \($0.localizedDescription)")
    }, onDisposed: {
        print("disposed")
    }
    ).disposed(by: disposeBag)
    
// error : The operation couldn’t be completed. (__lldb_expr_65.TraitsError error 0.)
// disposed

 

Completable


error 발생 시에만 발생시킬 수 있는 Observable의 변형

 

어떠한 요소도 방출 되지 않는 것이 보장

 

작업이 완료 되었다라는 것만 고려하고 해당 완료로 인해 발생한 요소는 신경 쓰지 않고 모든 사례를 모델링할 때 사용하거나,
요소를 방출할 수 없는 Observable를 사용하는 것과 비교

Completable.create{ observer -> Disposable in
    observer(.completed)
    return Disposables.create()
}
.subscribe(onCompleted: {
    print("compledted")
}, onError: {
    print($0.localizedDescription)
}, onDisposed: {
    print("disposed")
}).disposed(by: disposeBag)


// compledted
// disposed

 

Maybe


 

Single과 Completable의 중간에 있는 Observable의 변형

 

단일 요소를 방출하거나 요소를 방출하지 않고 완료하거나(completed), 오류를 방출할 수 있음(error)

 

Success

Maybe<String>.just("Hi")
    .subscribe(onSuccess: {
        print($0)
    }, onError: {
        print($0.localizedDescription)
    }, onCompleted: {
        print("completed")
    }, onDisposed: {
        print("dispose")
    })
    .disposed(by: disposeBag)
// Hi
// dispose

 

 

error

Observable<String>.create{ observer -> Disposable in
    observer.onError(TraitsError.maybe)
    return Disposables.create()
}
.asMaybe()
.subscribe(onSuccess: {
    print($0)
}, onError: {
    print($0.localizedDescription)
}, onCompleted: {
    print("completed")
}, onDisposed: {
    print("dispose")
}).disposed(by: disposeBag)

// The operation couldn’t be completed. (__lldb_expr_65.TraitsError error 1.)
// dispose

 

출처

패스트캠퍼스 | 30개 프로젝트로 배우는 iOS 앱개발 with Swift 초격차 패키지 Online
728x90

'iOS > RxSwift' 카테고리의 다른 글

[RxSwift] TimeBasedOperator  (0) 2023.10.03
[RxSwift] Combine Operator  (0) 2023.10.03
[RxSwift] Subject  (0) 2023.09.16
[RxSwift] Observable  (0) 2023.09.10
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.