clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Swift
  • uikit
  • Q
  • ㅅ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

RxSwift(26). amb
RxSwift + MVVM

RxSwift(26). amb

2023. 2. 20. 16:29

amb

amb는 두개이상의 소스옵저버블중에서 가장먼저 NE를 전달한 옵저버블을 구독하고 나머지는 무시한다.

마블다이어그램에서 가장먼저 NE를 전달하는것은 두번째 옵저버블이다 이 옵저버블이 전달하는 NE가 구독자에게 전달되고 나머지는 무시된다.

 

amb연산자를 사용하면 여러 서버로 요청을 전달하고 가장 빠른 응답을 처리하는 패턴을 구현할 수 있다.

public func amb<O2: ObservableType>
        (_ right: O2)
        -> Observable<Element> where O2.Element == Element {
        Amb(left: self.asObservable(), right: right.asObservable())
    }

하나의 옵저버블을 파라미터로 받는다.

두 옵저버블중 가장먼저 NE를 전달하는 옵저버블을 구독하고 이옵저버블의 이벤트를 구독자에게 전달하는 새로운 옵저버블을 리턴한다.

 

만약 3개이상의 옵저버블을 대상으로 연산자를 사용해야 한다면 타입메서드로 구현되어있는 연산자를 사용한다.

public static func amb<Sequence: Swift.Sequence>(_ sequence: Sequence) -> Observable<Element>
        where Sequence.Element == Observable<Element> {
        sequence.reduce(Observable<Sequence.Element.Element>.never()) { a, o in
            a.amb(o.asObservable())
        }
    }

이때는 모든 소스 옵저버블을 배열 형태로 전달한다.

 

a.amb(b)
    .subscribe{ print($0) }
    .disposed(by: bag)

a.onNext("A")
b.onNext("B")

//next(A)

a가 먼저 NE를 방출했기 때문에 a를 구독하고 a가 내보내는 모든 이벤트가 구독자에게 전달된다.

 

배열형태 사용방법

Observable.amb([a, b, c])
    .subscribe{ print($0) }
    .disposed(by: bag)

a.onNext("A")
b.onNext("B")

//next(A)

 

저작자표시 비영리 동일조건 (새창열림)
    'RxSwift + MVVM' 카테고리의 다른 글
    • RxSwift(28). Sharing Subscription, multicast, ConnectableObservable, publish, replay
    • RxSwift(27). interval, timer, timeout, (delay, delaySubscription)
    • RxSwift(25). withLatestFrom, sample, switchLatest, reduce
    • RxSwift(24). startWith, concat, merge, combineLatest, zip
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바