[RxSwift] Operator

JIN WOO Park (PFXStudio)
6 min readFeb 11, 2020

Operator 종류와 기능에 대해 정리 해 보았다.

Operator는 Observable에서 방출 된 이벤트를 변환하는 기능을 가지고 있다.

Operator는 크게 세가지로 구분된다.

  • Filtering Operator
  • Transforming Operator
  • Combining Operator

Filtering Operator

Filtering Operator는 .next 이벤트를 통해 전달 받은 값을 필터링 하는 기능을 가진 Operator이다.

.filter

  • .filter(조건식)을 넣어 조건식에 만족하는 이벤트만 방출하게 된다.

.skip

  • .skip(n)을 넣어 n개의 이벤트를 무시하는 기능을 한다.

.skipWhile

  • .skipWhile(조건식)을 넣어 조건식이 만족하는 이벤트부터 방출하게 된다.

.take

  • .take(n)을 넣어 n개의 이벤트만 방출하고 complete 된다.

.takeWhile

  • .takeWhile(조건식)을 넣어 조건식이 만족하는 이벤트만 방출하고 조건식을 만족하지 않으면 complete 된다.

.distinctUntilChanged

  • .distinctUntilChanged()는 연달아 같은 값으로 이벤트가 발생 될 때 중복 된 값은 방출하지 않도록 하는 기능이다.

.throttle(:scheduler)

  • .throttle(.seconds(1), latest: false, scheduler: MainScheduler.instance) 는 특정 시간 동안 방출하는 이벤트를 한번만 발생하게 해 준다. 하지만 latest 값을 true로 설정하면 특정 시간 동안 방출을 막아주지만 마지막 이벤트는 방출하게 된다. (버튼의 중복 탭 이벤트를 막기 위해 유용하게 쓰일 듯)

. debounce

  • .debounce(.seconds(1), scheduler: MainScheduler.instance)는 특정 시간이 지난 후 마지막 이벤트를 한번만 발생하게 해 준다. 이벤트 발생과 동시에 시간은 다시 초기화 된다. (searchbar 입력 시 유용하게 쓰일 듯)

Transforming Operators

Observable을 변경하는 Operator이다.

.map

  • 이벤트를 다른 이벤트로 변형한다.
  • Swift의 map과 동일한 기능을 한다.

Observable.of(1, 2, 3) .map { $0 * 10 } .subscribe(onNext: { print($0) }) .disposed(by: self.disposeBag)

  • 위 예제는 1, 2, 3 이벤트 값은 .map 수식에 의해 10, 20, 30으로 전달 된다.

.flatMap

  • Observable을 새로운 Observable로 변경하여 이벤트로 전달 한다.

let valueSubject = PublishSubject<Int>()

valueSubject.flatMap{

BehaviorSubject<Int>(value: $0)

}

.subscribe(onNext: {

print($0)

})

.disposed(by: self.disposeBag)

  • PublishSubject를 BehaviorSubject로 변형하여 이벤트를 방출한 예제이다.

.flatMapLatest()

  • flatMap에서 가장 최신의 값을 다른 Observable로 변형하여 이벤트 방출을 한다. 이전 Observable은 자동적으로 구독이 취소 된다.

.flatMapFirst()

  • .flatMapLatest와 반대로 이전에 생성한 Observable 동작이 끝날 때까지 새로 생성 된 Observable은 이벤트를 방출하지 않는다.

Combining Operators

이벤트를 모으고 병합 및 조합하는 Operator이다.

.concat()

  • 하나의 Observable의 이벤트가 종료 되면 그 뒤에 다른 Observable의 이벤트를 연결 시켜 준다.
  • 즉, Observable의 이벤트를 일렬로 병합 해 주는 Operator이다.

.merge()

  • 각각의 Observable의 이벤트 발생 순서에 따라 병합 시켜 주는 Operator이다.

.combineLatest()

  • Observable의 마지막 이벤트끼리 병합이 이루어 질 때 방출하는 Operator이다.

.zip()

  • Observable의 이벤트가 쌍이 이루어 질 때만 방출하는 Operator이다.

.withLatestFrom()

  • 한쪽 Observable의 마지막 이벤트와 병합을 시켜주는 Operator이다.
  • 기준이 되는 Observable의 이벤트가 발생하지 않으면 병합이 이루어 지지 않는다.

.scan()

  • 값을 저장하거나 그 값을 통해 이벤트를 변형하는 Operator이다.
  • 이벤트 변형이 되지만 Observable 타입은 동일해야 한다.

개인적으로 공부하면서 정리 한 내용이라 틀린 내용이 있을 수 있습니다..

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

No responses yet

Write a response