[RxSwift] Transforming Operator
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 로부터 요소를 추출한다.