RxSwift 2일차 - Rx 3요소 - Operator

wormsJJG·2022년 9월 19일
0

RxSwift

목록 보기
2/4
post-thumbnail

Operator


OperatorObservable을 생성하거나 변환해주는 도구다.

  • 대문자를 소문자로 변환해주는 lowercased()
  • 배열에서 배열이 비었는지 확인해주는 isEmpty

위 예시들처럼 Observable에서도 다양한 연산을 쉽게 처리할 수 있도록 도와주는 것이 바로 Operator이다.

Operator는 크게 세 그룹으로 나뉜다.

  • Filtering Operator
  • TransForming Operator
  • Combining Operator

1. Filtering Operators

Filtering Operator를 통해 .next이벤트를 통해 받아오는 값을 선택적으로 취할 수 있다.

.filter
조건에 맞는 이벤트만 방출
.skip
n개의 이벤트를 skip.
.skipWhile
조건식을 만족할 때까지 skip하고 종료
.take
n개의 이벤트만 방출하고 complete.
.takeWhile
skipWhile과 유사하다
.distinctUntilChanged
연달아 같은 값이 이어질 때 중복된 값을 막아줌.
throttle(:_ scheduler)
특정시간 동안 발생한 이벤트 중 가장 최신의 이벤트를 방출한다.
Tap을 여러번 했을 때 최신의 이벤트만 방출되는 것을 볼 수 있다.

2. Transforming Operators

observable을 변형하는 Operator이다.

.map()
이벤트를 다른 이벤트로 변형
Observable에서 작동된다는 것을 제외하면 기존의 map과 같음

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

.flatMapLastest()
flatMap 에서 가장 최신의 값만 확인하고 싶을 때 사용
flatMap과 동일하게 이벤트가 들어오면 새 Observable 생성
하지만 새로 생성하면 이전 Observable 구독을 해지

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

3.Combining Operators

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

.concat(_ :)
여러 시퀀스를 순서대로 묶어줌
첫 번째 시퀀스가 완료 될때까지 구독하고 다음 시퀀스를 같은 방법으로 구독
Observable.concat과 달리 .concat은 요소들이 같은 타입일 때 가능하다.

.merge()
시퀀스를 합치는 가장 쉬운 방법
여러 옵저버블에 공통된 로직을 실행해야 할 때 merge해서 구독(Subscribe)할 수 있다.

.combineLastest()
여러 옵저버블에서 가장 최신의 값을 병합하여 방출
모든 옵저버블이 하나의 값을 방출하는 순간까지 아무일이 일어나지 않음
한번 값을 방출한 이후에는 클로저가 각각의 Observable이 방출하는 최신의 값을 받음

.zip
발생 순서가 같은 Event끼리 병합하여 방출
이벤트끼리 쌍을 이루지 않으면 방출 x

.withLastestFrom(_ :)
한쪽 옵저버블의 이벤트가 발생할 때 두개의 옵저버블을 병합

.scan()
값을 저장해 가지고 있을수 있고, 그 값을 통해 이벤트를 변형할 수 있음
변형하는 이벤트의 타입은 원본 타입과 같아야함
초기값을 지정해야함

출처 - 링크

profile
IOS DEV

0개의 댓글