[RxSwift] Combining Operators

RudinP·4일 전
0

Study

목록 보기
363/363
post-thumbnail

startWith

  • 옵저버블 시퀀스 앞에 새로운 요소를 추가하는 연산자
  • 주로 기본값이나 시작값을 지정할 때 활용

  • 추가되는 값은 LIFO

concat

  • 두 개의 옵저버블을 연결하는 연산자
  • 타입 메소드, 인스턴스 메소드 두 가지
    • 대상 옵저버블이 completed 이벤트를 전달한 경우에만 옵저버블 연결 후 전달
    • error이벤트가 전달된 경우 대상 옵저버블만 전달됨
  • completed는 연결된 모든 요소가 전달되면 전달됨

merge

  • 여러 옵저버블이 방출하는 이벤트를 하나의 옵저버블에서 방출하도록 병합하는 연산자
  • 하나의 옵저버블이 모든 요소를 방출하고 completed를 전달하면 이어지는 옵저버블을 연결하는 concat과 달리, merge는 두 개 이상의 옵저버블을 병합하고 모든 옵저버블에서 방출하는 요소들을 순서대로 방출하는 옵저버블을 리턴
  • 병합 가능 옵저버블 수에는 제약이 없다.
    • 제약을 원한다면, merge(maxConcurrent:) 사용
    • 만약 2개로 제한했는데 3개의 옵저버블을 merge했을 때, 앞선 두 옵저버블 중 먼저 completed를 전달한 옵저버블을 제외하고 나머지 옵저버블이 merge대상에 포함된다.



  • 이후 각 옵저버블에 next이벤트를 전달하더라도 하나의 옵저버블이 전달한것으로 된다.

  • merge 가 종료되는 시점은 merge된 옵저버블 모두가 completed를 전달하는 시점이다.

  • 그러나 병합 대상 중 하나라도 error이벤트를 전달한다면 그 즉시 error이벤트를 전달하고 종료한다.

combineLatest

  • 소스 옵저버블이 방출하는 최신 요소를 병합하는 연산자


  • 모든 combine 대상자가 completed를 전달해야지만 종료된다.
    • 그 전까진, completed를 전달한 대상자의 최신 요소와 병합되어 전달된다.
  • combine 대상자 중 하나라도 error이벤트를 전달한다면 그 즉시 종료

zip

  • Indexed Sequencing을 구현하는 연산자
  • 결합하는건 combineLatest와 동일하나, 순서대로 짝이 맞춰져야 결합된 후 전달

  • 마찬가지로 zip에 참여한 옵저버블 모두 completed를 전달해야 종료되며, 하나라도 error이벤트 전달시 그 즉시 종료된다.

withLatestFrom

  • 트리거 옵저버블이 Next 이벤트를 방출하면 데이터 옵저버블이 가장 최근에 방출한 Next 이벤트를 구독자에게 전달하는 연산자
  • 회원가입하는 시점에 텍스트필드에 입력된 값을 가져오기 등에 사용

  • 만약 data에서 error을 전달한다면 바로 error가 전달되고 종료된다.

sample

  • 트리거 옵저버블이 Next 이벤트를 전달할 때마다 데이터 옵저버블이 Next 이벤트를 방출하지만, 동일한 Next 이벤트를 반복해서 방출하지 않는 연산자
  • withLatestFrom과 달리, dataObservable.sample(triggerObservable) 식으로 사용
    (파라미터가 반대)

  • withLatestFrom과 달리, 데이터 옵저버블이 completed를 방출하면 바로 전달
  • 마찬가지로 데이터 옵저버블이 error이벤트를 방출하면 트리거 옵저버블이 onNext를 하지 않더라도 바로 전달

switchLatest

  • 가장 최근에 방출된 옵저버블을 구독하고, 이 옵저버블이 전달하는 이벤트를 구독자에게 전달하는 연산자
  • 소스로 completed 이벤트를 전달해야만 종료됨.
    • 최신 옵저버블이 completed 이벤트를 전달하는건 관련 없음
    • 최신 옵저버블이 error이벤트를 전달한다면 즉시 전달
      - 반면, 최신 옵저버블이 아닌데 error이벤트 전달하면 X

reduce

  • 시드 값과 옵저버블이 방출하는 요소를 대상으로 클로저를 실행하고 최종 결과를 옵저버블로 방출하는 연산자
  • scan과 달리 중간값을 방출하지 않음

profile
iOS 개발자가 되기 위한 스터디룸...

0개의 댓글