[RxSwift] Filtering Operators

RudinP·2025년 9월 22일
0

Study

목록 보기
361/363

ignoreElements

  • next 이벤트를 필터링하고 completederror 하나만 전달

element(at:)

  • 특정 인덱스에 위치한 요소를 제한적으로 방출
  • 정수 인덱스를 파라미터로 받아 옵저버블 리턴
  • elementAt 은 depcrated됐다.

filter

  • 특정 조건에 맞는 항목을 필터링하여 방출

skip

  • 지정한 수만큼 next이벤트를 무시
  • 전달되는 정수는 인덱스가 아닌 count임을 유의

skip(until:)

  • 트리거 옵저버블이 이벤트를 방출하기 전까지 next이벤트를 무시
  • 파라미터로 전달하는 옵저버블을 트리거라고 부른다

skip(while:)

  • 조건에 따라 이벤트 방출을 결정하는 연산자
  • 클로저가 한번이라도 false를 리턴하면 false를 리턴했던 이벤트 이후에는 조건을 판단하지 않고 이벤트를 방출한다.

skip(duration:scheduler:)

  • 지정한 시간동안 이벤트 방출을 무시하는 연산자
  • duration:동안 무시
  • 시간상 오차가 존재하므로 이상적인 결과인 next(4)부터 방출되진 않음

take

  • 처음 n개의 이벤트만 방출
  • 그 이후에는 무시
  • 해당되지 않는 next 이벤트만 무시한다. (completed, error은 전달됨)

take(while:)

  • 조건을 충족하는 동안 이벤트를 방출하는 연산자(충족하지 않게된 이후는 무시)
  • behavior
    • .exclusive라면 마지막으로 확인한 값이 true인 경우, 방출하고 false인 경우 무시 (기본값)
    • .inclusive인 경우 조건에 상관없이 방출 (자주 사용 X)

take(until:)

  • 트리거 옵저버블이 next이벤트를 방출하기 전까지 이벤트를 방출
    • 트리거 옵저버블
    • 클로저

takeLast

  • 원본 옵저버블의 마지막 n개의 이벤트만 방출
  • 다만 completed이벤트 전까지 지연시키다가 이후 버퍼에 저장된 이벤트 방출
  • error이벤트 전달할 경우 버퍼에 저장된 이벤트 전달 X, error이벤트만 전달됨.

take(for:scheduler:)

  • 지정된 시간동안 이벤트를 방출
  • 다만, 시간 오차 존재

single

  • 하나의 요소가 방출되는 것을 보장하는 연산자
  • 첫번째 요소만 방출하거나 조건과 일치하는 첫번째 요소만 방출
  • 단 하나의 요소만 방출되어야 정상적으로 종료
    • 원본 observable이 요소를 방출하지 않거나 2개 이상 방출하려 하면 error

  • predicate를 통해 조건을 주어 하나만 방출하게 된다면 정상적으로 completed이벤트로 이어짐
  • single 연산자가 리턴하는 옵저버블은 원본 옵저버블에서 completed 이벤트 전달 전까지 대기.
  • completed 이벤트가 전달되는 시점에 하나의 요소만 방출되었다면 completed, 아니라면 error 이벤트 전달됨

distinctUntilChanged

  • 동일한 요소가 연속적으로 방출되는 것을 막아주는 연산자
  • 이벤트 자체가 아닌 이벤트 내부의 값을 비교함

  • 클로저로 조건을 추가 제공하는 것도 가능(여기서는 연속된 홀수만 걸러짐)

  • compound value의 비교 기준값을 설정하는 것도 가능

  • keypath 지정 가능

debounce, throttle

debounce

  • 짧은 시간 반복적으로 전달되는 이벤트를 효율적으로 처리하는 연산자
  • dueTime(시간)중 Observable이 지정된 이벤트를 방출 후 다른 next이벤트를 방출하지 않는다면 해당 시점에 가장 마지막으로 방출된 next 이벤트를 전달 후 타이머 초기화
  • 지정된 시간 이내에 또 다른 next이벤트가 방출되었다면, 타이머를 초기화. 이후 다시 지정된 시간동안 대기

  • Tap1~Tap9까지는 지정된 시간(1초) 내에 또 다른 next이벤트가 방출되어 타이머를 초기화(전달 x)
  • Tap10이후 Thread.sleep으로 1초 대기 -> Tap10 전달
  • 마찬가지로 Tap11~19까지 전달 x
  • Tap 20 후 completed 이벤트 방출로 인해 가장 마지막으로 방출된 next 이베트인 Tap20 전달

throttle

  • latest파라미터를 기본값을 사용한다면 debounce와 동일 파라미터

  • latest 파라미터에 따른 차이

    • true: 주기를 정확히 지킴

    • false: 반복주기가 경과한 다음 가장 먼저 방출되는 이벤트 전달(지정된 주기 초과 가능)

두 연산자의 차이점

  • throttle은 지정된 주기마다 이벤트를 하나씩 구독자에게 전달
    • 짧은 시간동안 반복되는 tap, delegate를 전달할 때 사용
  • debounce는 next이벤트가 전달된 다음 지정된 시간이 경과하기까지 다른 이벤트가 전달되지 않는다면 마지막으로 방출된 이벤트를 구독자에게 전달
    • 검색 기능을 구현할 때 사용
    • 사용자가 키워드를 입력할때마다 네트워크 요청 전달
profile
iOS 개발자가 되기 위한 스터디룸...

0개의 댓글