[RxSwift] Transforming Operator

Martin Kim·2022년 5월 4일
0

RxSwift

목록 보기
6/8

Transforming elements

toArray

  • Observable은 요소들을 하나씩 개별적으로 방출하지만, 이것들을 통합한 컬렉션으로 다루고 싶은 경우가 생긴다.
  • 예를 들면, 테이블뷰나 컬렉션뷰의 dataSource로 활용하고 싶은 때가 대표적이다.
  • 이런 경우 사용하는 연산자가 toArray이다. toArray 연산자는 요소들의 Observable 시퀀스를 배열로 바꿔서 방출한다.
  • toArray 연산자는 trait인 Single을 방출한다.
  • 당연하게도 success이벤트로 배열을 방출한다.

map

  • RxSwift의 map 연산자는 Swift standard 라이브러리의 map과 같이 작동한다.
  • 다만, Observable에서 작동한다는 점이다.

compactMap

  • map 과 filter 연산자의 합성
  • nil 값인 요소를 제외한 나머지들에 map 연산을 적용하게 된다.

flatMap

  • 여러 Observable 시퀀스의 각 요소를 Observable 시퀀스에 투영하고 그 결과로 하나의 Observable 시퀀스로 병합하는 연산자
  • map과는 다르게 스트림에서 방출되는 아이템들을 다른 observable로 만드는 역할을 수행한다.
  • 중요한 것은 flatMap을 통해 변환되는 각각 Observable들을 평평하게(flat) 한 스트림을 생성하여 방출된다는 점이다.

flatMapLatest

  • 만약 각 source Observable들 중 가장 최근의 Observable의 값만을 취하고자 할 때면, flatMapLatest 연산자를 사용한다.
  • 즉 flatMapLatest는 새로운 source Observable이 들어오게 되면, 그것으로 switch한다.
  • flatMap과 마찬가지로 target Observable로 평평하게 되며, subscribers들에게 평평하게 요소들이 제공된다.
  • 가장 흔하게 사용되는 사례는 네트워킹 작업을 할때다. 만약에 유저가 s,w,i,f,t 라는 글자를 차례로 타이핑 한다고 가정하면, 이전 차례의 요청을 무시하고 새로운 검색을 실행해야 할 것이다.

materialize

  • Observable을 그것의 이벤트를 감싼 Observable로 만든다.
  • 즉, 기존의 subscriber는 observable의 event가 아닌, event를 감싼 observable을 subscribe하게 된다.

dematerialize

  • materialize의 반대 역할을 수행한다. 이벤트를 감싼 observable 로부터 요소를 추출한다.

profile
학생입니다

0개의 댓글