ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Combining Operators
    RxSwift 2021. 8. 6. 17:13

    startWith Operator

    let bag = DisposeBag()
    let numbers = [1,2,3,4,5]
    
    Observable.from(numbers)
    .startWith(0)
    // .startWith(-1, -2)
    .subscribe{ print($0) }
    .disposed(by: bag)
    
    // 주로 기본값 저장할때 사용함
    // 연산자라고 보면됨
    // next(0) ~ (5) 까지 방출됨
    // 주석 해제하면 -2부터 나옴

    concat Operatoer

    let bag = DisposeBag()
    let numbers = Observable.from([1,2,3,4,5])
    let numbers2 = Observable.from([1,2,3,4,5])
    
    Observable.concat([numbers,numbers2])
    .subscribe{ print($0) }
    .disposed(by: bag)
    
    // Observable을 순서대로 연결한 하나의 Observable을 return 함

    merge Operator

    let bag = DisposeBag()
    
    let oddNumbers = BehaviorSubject(value: 1)
    let evenNumbers = BehaviorSubject(value: 2)
    
    let source = Observable.of(oddNumbers, evenNumbers)
    source
    .merge() // .merge(maxConcurrent:2 ) 이런식으로 최대를 제한할 수도 있음
    .subscribe{ print($0) }
    .disposed(by: bag)
    
    oddNumbers.onNext(3)
    evenNumbers.onNext(4)
    
    evenNumbers.onNext(6)
    oddNumbers.onNext(5)
    
    oddNumbers.onCompleted() // 여기서 만약 에러가 나면 뒤는 방출하지 않음
    evenNumbers.onNext(8)
    
    evenNumbers.onCompleted()  // 드디어 끝~
    
    // next(1), next(2), next(3), next(4), next(6), next(5), next(8), completed 가 나옴
    // concat과 헷갈릴수 있으나, 두개 이상의 Observables 라는 점, 방출하는 거라는 점

     

    CombineLatest Operator

    핵심은 언제 event 를 return 하는지 이다.

    2가 들어왓을때 2A와 B가 들어온뒤 2B가 나온다.

    2의 위치를 옮겼을때 B가 들어왔을때 1B가 그다음 2B가 출력된다.

    이것을 이해하는게 중요!

     

    Zip Operator 

    combineLatest와 비교하는게 좋다.

    중복된 요소를 전달하지 않는다, 반드시 매칭 첫번째 요소는 첫번재와 두번째는 두번째를 만나야 방출한다.

     

    withLatestFrom Operator

    triggerObservable.withLatestFrom(dataObservable)
    
    // 예를 들어 회원가입을 탭 했을때 텍스트 필드의 값을 가져오는 식으로 마지막 데이터를 return 하는것이다.

     

    sample Operator

    dataObservable.sample(triggerObservable)
    
    // withLatestFrom과 비교했을때, 동일한 애를 방출하지 않는다는 차이가 있음

     

    switchLatest Operator

    가장 최근에 방출하는걸 전달한다. Observable을 방출하는 Observable에 주로 사용함.

     

    redue Operator

    내 기준 자주 쓰이는것중 하나인것 같다.

    // scan 과 비교하며 확인하는게 좋다.

    let o = Observable.range(start: 1, count: 5)
    
    print("== scan")
    
    o.scan(0, accumulator: +)
    .subscribe { print $0 }
    .disposed(by: bag)
    
    print("== reduece")
    
    o.reduece(0, accumulator: +)
    .subscribe { print $0 }
    .disposed(by: bag)
    
    // 중간결과까지 모두 나오는 scan, 최종 결과 하나만 필요하다면 reduece

     

    728x90

    'RxSwift' 카테고리의 다른 글

    amb Operator  (0) 2021.08.10
    Scheduler  (0) 2021.08.10
    Transforming Operators  (0) 2021.08.05
    RxSwift Observable  (0) 2021.07.14
    RxSwift 스터디 계획 따라가기  (0) 2021.07.12

    댓글

Designed by Tistory.