ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [RxSwift] Operators (scan, window)
    프로그래밍/Swift 2021. 4. 16. 23:52

    1. scan

    직전에 내려보낸 데이터와 현재 stream(위)에 있는 데이터 이렇게 2개 데이터를 특정한 연산을 하고 내려보냄.

    예를들면 위의 stream에서 1은 내려보낸 것이 없어 그대로 내려가서 1이되고,

    1 다음에 있는 2는 직전에 내려보낸 1과 연산(1+2)하여 3이 되고, 이것을 내려보낸다.

     

    reduce와 비슷한 것 같지만 reduce는 한개의 원소만 최종적으로 내려보내는 것이고(다르기도하고 operator reduce가 따로 존재하기도 함)

    scan은 한개씩 내려보내면서 직전에 내려보낸 것과 상호작용을 함.

     

    사용예시

    class MenuListViewModel {
    //    var totalPrice: Observable<Int> = Observable.just(10_000)
        var totalPrice: PublishSubject<Int> = PublishSubject()
    }
    
    ...
    
    // 여기서 viewModel는 MenuListViewModel의 객체
    viewModel.totalPrice
    	.scan(0, accumulator: +) // 처음값을 0으로, 사용할 연산은 덧셈
    	.map { $0.currencyKR() }
    	.subscribe(onNext: {
    		self.totalPrice.text = $0
    	}).disposed(by: disposeBag)

    값만 바꾸면 UI도 같이 바뀌게 하려고 할 때, UI에 있는 실제 값(여기서는 viewModel 객체의 totalPrice 멤버변수)을 위 코드 같이 만들어서 PublishSubject를 사용해 외부에서 값을 넣을 수 있게 하고 scan을 사용하여 특정 이벤트가 발생될 때 이전값과 상호작용을 할 수 있게 한다.

     

    그리고 특정이벤트가 발생하면 아래의 코드가 호출되게 하여 데이터가 하나씩 추가되게하고, scan에서 이를 받아 처리하게 함.

    viewModel.totalPrice.onNext(100)

     

     

    2. window

    window라는 operator를 거치게 되면, 특정 갯수(여기서는 3개로 지정되어있음)가 되면 각각 observable로 나누어서 보내고 complete시킴. (from을 태우고 -> complete(종료))

    반응형

    '프로그래밍 > Swift' 카테고리의 다른 글

    [RxSwift] subject  (0) 2021.04.16
    [RxSwift] subscribe, next, error, completed  (0) 2021.04.15
    [RxSwift] Operators (just, from, map, filter)  (0) 2021.04.15

    댓글

Designed by Tistory.