[RxSwift] filter vs skip operator

728x90
반응형

 

Rx의 감을 되찾기 위해 Operator들을 정리하려고 합니다.

 

먼저 이번엔 특정 조건이 맞으면 이벤트를 발생시키는 메서드들에 대해 알아보도록 하겠습니다.

 

filter

조건이 맞는(참) 이벤트만 발생한다.

  • 짝수만 이벤트를 발생하는 예제
let disposeBag = DisposeBag()
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Observable.from(numbers)
    .filter { $0.isMultiple(of: 2) }
    .subscribe { print($0) }
    .disposed(by: disposeBag)
    
    
/*
 출력
  
 next(2)
 next(4)
 next(6)
 next(8)
 next(10)
 completed
*/

 

 

skip

정수를 파라미터로 받고, 지정된 파마리터 수 만큼 이벤트를 스킵한다.

 

 

 

  • 예제
Observable.from(numbers)
    .skip(3)
    .subscribe{ print("Skip :", $0) }
    .disposed(by: disposeBag)
    
    
/*
 출력
  
Skip : next(4)
Skip : next(5)
Skip : completed
*/

 

 

skipWhile

~ while 연산자의 특징이 조금 헷갈릴 수 있습니다.

조건이 false가 될때까지 skip하고 그 이후 부터는 조건을 판단하지 않고 이벤트가 발생됩니다.

 

  • 예제
Observable.from(numbers)
    .skipWhile{ $0 != 3 }
    .subscribe{ print("SkipWhile :", $0) }
    .disposed(by: disposeBag)
    
    
/*
 출력
  
SkipWhile : next(3)
SkipWhile : next(4)
SkipWhile : next(5)
SkipWhile : completed
*/

 

 

skipUntil

옵저버블 타입을 파마리터로 받고, 다른 Observable의 이벤트가 발생하기 전까지 skip한다.

 

  • 예제
let subject = PublishSubject<Int>()
let trigger = PublishSubject<Int>()

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

subject.skipUntil(trigger)
    .subscribe{ print("SkipUntil :", $0) }
    .disposed(by: disposeBag)

trigger.onNext(1)

subject.onNext(3)

/*
 출력
  
SkipUntil : next(3)
*/

 

반응형

'RxSwift' 카테고리의 다른 글

[RxSwift] Subject와 Relay - (3)  (0) 2019.07.25
[RxSwift] Observable이란 - (2)  (0) 2019.07.25
[RxSwift] RxSwift의 기본 개념 - (1)  (0) 2019.07.25