amb

  • 가장 먼저 이벤트를 방출하는 Observable을 구독하고, 나머지는 무시한다.
  • 기본적인 구현은 다음과 같다.
let aSubject = PublishSubject<Int>.init()
let bSubject = PublishSubject<Int>.init()

aSubject.amb(bSubject)
    .subscribe { print($0) }

bSubject.onNext(0) // next(0)
aSubject.onNext(1) // 무시
aSubject.onNext(2) // 무시
bSubject.onNext(3) // next(3)
  • 만약 2개 이상의 Observable을 비교하고 싶다면 타입 메서드로 구현된 amb(_:) 연산자를 사용해야 한다.
  • 그리고 전달되는 Observable은 배열로 전달해야 한다.
enum MyError: Error {
    case error
}

Observable.amb([aSubject, bSubject, cSubject])
    .subscribe { print($0) }

cSubject.onNext(0) // next(0)
aSubject.onNext(1) // 무시
aSubject.onError(MyError.error) // 무시
bSubject.onNext(2) // 무시
bSubject.onCompleted() // 무시
cSubject.onNext(3) // next(3)
cSubject.onCompleted() // completed