[Swift] RxSwift를 통한 비동기 프로그래밍(3)

Charlie·2022년 9월 4일
0
post-custom-banner

Operator

Operator는 Observable에서 받은 이벤트들을 변환하고 처리할 수 있는 메소드들이다.
Operator의 종류로는 Filtering Operator, Transforming Operator, Combining Operator 가 있다.

Filtering Operators

next 이벤트를 통해 받아오는 값을 선택적으로 가질 수 있다.

.filter

조건식에 부합하는 이벤트만 방출한다.

.skip

n개의 이벤트를 skip한다.

.skipWhile

조건식을 만족할 때 까지 skip하고 종료한다.

.take

n개의 이벤트만 방출하고 complete한다.

.takeWhile

조건식을 만족하지 않는 이벤트까지 방출하고 종료한다.

.distinctUntilChanged

연달아 같은 값이 방출될 때 중복된 값을 막아준다.

.throttle()

특정 시간동안 발생한 이벤트 중 가장 최신의 이벤트를 방출한다.

Transforming Operators

Observable을 변형하는 Operator이다.

.map()

이벤틀를 다른 이벤트로 변형한다.

.flatMap()

이벤트 시퀀스를 다른 이벤트 시퀀스로 변형한다. Observable의 이벤트를 받아 새로운 Observable로 변환한다.

.flatMapLatest()

flatMap에서 가장 최신의 값만을 확인하고 싶을 때 사용한다. 이벤트가 들어오면 새로운 Observable을 만들지만, 새로운 Observable을 생성하면 이전의 Observable 구독을 자동으로 해지한다.

.flatMapFirst()

flatMapLatest()와 반대로 이전에 생성한 Observable의 동작이 다 끝날 때 까지 새로 생성한 Observable은 무시한다.

Combining Operators

시퀀스들을 모으고 각 시퀀스 내의 데이터를 병합하는 Operator이다.

.concat()

  • 이전 시퀀스가 완료될 때 까지 구독하고 다음 시퀀스를 구독하는 방식으로 여러 시퀀스들을 순서대로 묶어준다.
  • Observable.concat()과 달리 .concat()은 요소들이 같은 타입일 때 가능하다.
let first = Observable.of(1, 2, 3)
let second = Observable.of(4, 5, 6)

let observable = Observable.concat([first, second])
let observable = first.concat(second)	// 같은 타입일 때만 가능

.merge()

  • 여러 Observable에 공통된 로직을 실행해야 할 때 merge한 후 subscribe할 수 있다.
let first = Observable.of(1, 2, 3)
let second = Observable.of(4, 5, 6)
let disposeBag = DisposeBag()

Observable.merge(first, second)
	.subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

.combindLatest()

  • 여러 Observable들 중에서 가장 최신의 값들을 합쳐서 방출한다.
  • 모든 Observable이 하나의 값을 방출할 때 까지 아무 일도 일어나지 않는다.

.zip()

  • 발생 순서가 같은 이벤트끼리 병합하여 방출한다.
  • 이벤트끼리 쌍을 이루지 않으면 방출하지 않는다.

.withLatestFrom()

한쪽 Observable의 이벤트가 발생할 때 두 개의 Observable을 병합한다.

.scan()

  • 값을 저장하고 있다가 그 값을 통해 이벤트를 변형한다.
  • 변형하는 이벤트 타입은 원본의 타입과 같아야한다.
  • 초기값을 무조건 지정해주어야 한다.

Reference

KangHoon님 블로그

profile
Hello
post-custom-banner

0개의 댓글