RxSwift

[RxSwift] Filtering Operators (Skipping)

thoonk: 2021. 5. 11. 14:07
반응형

Filtering Operators 중 Skipping Operators에 관해 정리한 내용을 기록하겠습니다.

Skipping Operators

1. Skip

첫 번째 요소부터 n개의 요소를 스킵한다.

 

let bag = DisposeBag()

Observable.of(1, 2, 3, 4, 5, 6)
    .skip(3)
    .subscribe(onNext: { num in
        print(num)
    })
    .disposed(by: bag)
    
// 첫 이벤트부터 3개를 스킵하므로 1, 2, 3이 출력되지 않고 4, 5, 6이 출력된다.

 

2. SkipWhile

특정 조건에 만족하지 않는 요소가 나올 때까지 스킵하고

특정 요소에 만족하는 요소가 나오면 스킵을 종료하는 연산자이다.

 

let bag = DisposeBag()

Observable.from([1,2,3,4,5,6,7,8,9])
    .skip(while: { $0 != 5 })
    .subscribe(onNext: { num in
        print(num, terminator: " ")
    })
    .disposed(by: bag)
    
// 5 6 7 8 9
// 특정 조건($0 != 5)에서 5가 아니면 요소들을 스킵하고 5인 요소가 나오면 스킵을 종료한다.

 

3. SkipUntil

다른 Observable이 요소를 방출할 때까지 기존의 Observable의 요소를 스킵하는 연산자이다.

 

let bag = DisposeBag()

let subject = PublishSubject<Int>()
let trigger = PublishSubject<Void>()

subject
    .skip(until: trigger)
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: bag)

subject.onNext(1)
subject.onNext(2)

trigger.onNext(())
subject.onNext(3)

// 3
// trigger에 이벤트가 방출되기 전까지 subject에 방출된 1, 2는 스킵되고
// trigger에 이벤트가 방출된 후에 3이 방출되는 것을 볼 수 있다.

 

4. SkipLast

skip과 반대로 마지막 요소부터 n개의 요소를 스킵한다.

공식문서에는 있는 연산자지만 셀제 프로젝트에서 메서드가 존재하지 않아 예제를 준비하지 못 했다.. 

생기면 업데이트🙄

 

부족한 점 피드백해주시면 감사하겠습니다👍

 

참고: 

reactivex.io/

github.com/fimuxd/RxSwift/blob/master/Lectures/05_Filtering%20Operators/Ch5.%20FilteringOperators.md

반응형