Conditional & Boolean Operators 종류
- Amb
- Skip (skip:)
- Skip (while:)
- Take (Until:)
- Take (while:)
Amb
두 개 이상의 Observable이 제공된 경우, Observable 중 첫 번째 항목에서만 모든 항목을 내보내 항목 또는 알림을 보낸다.
여러 Observable을 Amb로 전달하면 해당 Observable 중 하나의 배출 및 알림을 전달한다.
첫 번째는 항목을 내보내거나 onError / onCompleted 알림을 보내 Amb에 알림을 보낸다.
Skip(until:)
두 번째 Observable 이 지정된 항목을 방출 할 때까지 첫 번째 Observable이 방출한 항목을 버린다.
Skip은 Observable을 구독하지만, 두 번쨰 Observable이 항목을 방출할 때까지 Skip(until:)은
Observable을 미러링하기 시작할 때까지 방출을 무시한다.
위 다이어그램와 같이 두 번째 Observable에서 0 이라는 항목이 배출되기 전까지의 항목들은 모두 무시되는 것을 볼 수 있다.
let first = PublishSubject<String>()
let second = PublishSubject<String>()
let third = PublishSubject<Int>()
first
.skip(until: second)
.subscribe { print("skip(until:) : \($0)") }
.disposed(by: disposedBag)
second
.skip(until: third)
.subscribe { print("skip : \($0)") }
.disposed(by: disposedBag)
first.onNext("가")
first.onNext("나")
first.onNext("다")
second.onNext("A")
third.onNext(1)
second.onNext("B")
first.onNext("라")
first.onNext("마")
first.onNext("바")
second.onNext("C")
first.onNext("사")
// skip : next(B)
// skip(until:) : next(라)
// skip(until:) : next(마)
// skip(until:) : next(바)
// skip : next(C)
// skip(until:) : next(사)
Skip (while:)
Observable을 구독하지만 지정한 조건이 False가 될 때까지 배출을 무시한다.
이 시점에서 skip(while:)은 Observable을 미러링하기 시작한다.
Observable.of(1, 2, 3, 4)
.skip(while: {$0 != 3} )
.subscribe { print("skip(while:) : \($0)")}
.disposed(by: disposedBag)
// skip(while:) : next(3)
// skip(while:) : next(4)
// skip(while:) : completed
Take (until:)
Observable을 구독하고 미러링을 시작하며 제공하는 두 번째 Observable도 모니터링한다.
두 번째 Observable이 항목을 내보내거나 종료 알림을 보내는 경우 Take(until)에 의해 반한된 Observable은 미러링을 중지하고 종료한다.
Skip(until:) 과 반대의 개념이다.
let first = PublishSubject<String>()
let second = PublishSubject<String>()
let third = PublishSubject<Int>()
first
.take(until: second)
.subscribe { print("take(until:) : \($0)") }
.disposed(by: disposedBag)
second
.take(until: third)
.subscribe { print("take : \($0)") }
.disposed(by: disposedBag)
first.onNext("가")
first.onNext("나")
first.onNext("다")
second.onNext("A")
third.onNext(1)
second.onNext("B")
first.onNext("라")
first.onNext("마")
first.onNext("바")
second.onNext("C")
first.onNext("사")
// take(until:) : next(가)
// take(until:) : next(나)
// take(until:) : next(다)
// take(until:) : completed
// take : next(A)
// take : completed
Take (while:)
지정한 조건이 false가 될 때까지 Observable을 미러링한다.
이 시점에서 Take(while:)은 Observable의 미러링을 중지하고 자체 Observable을 종료한다.
Observable.of(1, 2, 3, 4)
.take(while: {$0 != 3} )
.subscribe { print("take(while:) : \($0)")}
.disposed(by: disposedBag)
// take(while:) : next(1)
// take(while:) : next(2)
// take(while:) : completed
'개발 > RxSwift' 카테고리의 다른 글
[RxSwift] bind, driver, relay (0) | 2022.03.20 |
---|---|
[RxSwift] Mathematical & Aggregate, Connectable Observable Operators (0) | 2022.03.20 |
[RxSwift] Observable Utility Operators (0) | 2022.03.18 |
[RxSwift] Combining Observables & Error Handling Operators (0) | 2022.03.14 |
[RxSwift] Filtering Observable (0) | 2022.03.11 |