ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.