-
Rxswift (flatMap, flatMapFirst, flatMapLatest)RxSwift 2021. 6. 24. 10:29
해당 내용은 http://reactivex.io/documentation/operators.html#transforming 를 참고하면 되는데
요약하자면, Observable 항목 변환 라고 나와있다.
즉 위와 같은 내용으로 변환해준다고 할 수 있다. 그중에서
FlatMap
observable에서 발행한 아이템을 다른 Observable로 만들며, 해당 아이템을 발행하는 모습이라고 볼 수 있다.
flatMapFirst
flatMap과 마찬가지지만, 새로운 Observable은 동작이 다 끝날때까지 새로 발행된 아이템을 무시한다.
즉 여러개의 Observable이 return 될때 시작한 Observable이 아직 발행이 끝나지 않으면 그 후의 input은 무시되는 셈이다.
flatMapLatest
flatMapFirst와 달리, 마지막 input이 중요하다고 보면 될것같다.
즉 input 1, 2, 가 차례로 들어왔을때 1로 인해 만들던 observable을 2가 들어오면 알아서 dispose하고 2로 인해 만드는 observable을 발행한다.
예시
나는 아래와 같이 transform에서 observable -> observable을 return 시키고 사용하는 부분에서 subscribe할 수 있도록 했다.
struct Input { let searchText: Driver<String> // search bar input Text } struct Output { var appList: Driver<[AppModel]> // input, output모두 확장 } func transform(_ input: Input, disposeBag: DisposeBag) -> Output { let searchList = input.searchText.flatMapLatest { text in // text는 마지막꺼만 중요 return self.useCase.search(input: text) .asDriverOnErrorJustComplete() } return Output(appList: searchList) }
728x90'RxSwift' 카테고리의 다른 글
RxSwift 스터디 계획 따라가기 (0) 2021.07.12 RxSwift Subject (0) 2021.07.09 Rxswift Debounce / Throttle (0) 2021.06.29 Rxswift (map, flatmap, compactmap) 정리 (0) 2021.06.28 RxSwift (1) 2021.06.17