상세 컨텐츠

본문 제목

RxSwift. Ch 7. Transforming Operators

TIL/RxSwift

by box-jeon 2020. 4. 26. 23:29

본문

Transforming elements

  • toArray() - 전달되는 element들을 배열로 방출하는 Observable을 리턴합니다. 이 Observable은 .next 이벤트 전달 직후 .completed 이벤트를 방출합니다.
  • map<R>(_ transform: @escaping (E) throws -> R) - 전달되는 element들을 transform closure의 파라미터로 넣어주고 그 리턴값을 방출하는 Observable을 리턴합니다.
  • enumerated() - 전달되는 element를 index와 함께 방출하는 Observable을 리턴합니다.

Transforming inner observables

Observable이 프로퍼티로 Observable을 갖는 경우, flatMap을 통해 이를 다루는 방법을 소개합니다.

func flatMap<O: ObservableConvertibleType>(_ selector: @escaping (E) throws -> O-> Observable<O.E>

Swift Standard Library의 flatMap과 유사합니다. 배열의 배열을 flatMap하면 단일 배열을 리턴하는 것과 마찬가지로 Observable을 방출하는 Observable을 flatMap하면 inner Element를 방출하는 Observable을 리턴합니다.

func flatMapLatest<O: ObservableConvertibleType>(_ selector: @escaping (E) throws -> O)

아직 다뤄지진 않았지만 map과 switchLatest을 결합한 것입니다. Observable을 방출하는 Observable을 flatMapLatest하면 가장 마지막에 방출된 Observable의 inner Element를 방출하는 Observable을 리턴합니다. 

Observing events

Observable을 이벤트의 Observable로 변환해야할 경우가 있습니다. 이렇게 되면 .error나 .completed 이벤트도 .next(.error), .next(.completed)로 감싸져서 전달되며, Observable을 방출하는 Observable을 flatMap했을 때 inner Observable의 종료에 의해 subscription이 종료되는 상황을 피할 수 있습니다. materialize()는 wrapping을 dematerialize()는 unwrapping을 수행합니다.

관련글 더보기

댓글 영역