[RxSwift] - Filtering Operator (IgnoreElement, elementAt, filter, skip, take)

sun02·2022년 2월 10일
0

RxSwift

목록 보기
4/12

1. Filter

observable에서 특정 조건을 만족하는 item만 방출합니다.

Observable.of(1,2,3,4,5,6)
    .filter {$0 > 3}
    .subscribe(onNext: {
        print($0)
    })

// 실행 시 다음을 출력합니다
4
5
6

2. IgnoreElements

: 어떠한 item도 방출하지 않음

모든 이벤트를 방출되지 않도록 무시하지만,
종료 알림(onError, onCompleted)은 그대로 통과하도록 허용합니다.

Observable에서 내보내는 알림을 모두 무시하고 종료 알림만 받고싶을 때 사용하면 용이합니다.

let disposeBag = DisposeBag()

let z = PublishSubject<String>()

z
    .ignoreElements()
    .subscribe {
        print($0)
    }
    .disposed(by: disposeBag)
    
z.onNext("a")
z.onNext("a")
z.onNext("a")
z.onNext("a")
z.onCompleted()

// 실행시 다음을 출력합니다
completed

3. ElementAt

: Observable이 방출한 n번째 항목한 내보냄

특정 index에 위치한 아이템만 가져와 단독으로 방출합니다.

let disposeBag = DisposeBag()

let b = PublishSubject<String>()

b
    .element(at: 2)
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

b.onNext("a")
b.onNext("b")
b.onNext("c")
b.onNext("d")

//실행 시 다음을 출력합니다.
c

4. Skip

: Observable이 배출한 항목에서 처음 n개 무시

let disposeBag = DisposeBag()

Observable.of("a","b","c","d","e","f")
    .skip(3)
    .subscribe (onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

// 실행 시 다음을 출력합니다.
d
e
f

+ SkipWhile

: 조건이 false가 될 때까지 Observable이 내보낸 항목을 버림

let disposeBag = DisposeBag()

Observable.of("a","b","c","d","e","f")
    .skip(while: {$0 != "c"})
    .subscribe (onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

// 실행 시 다음을 출력합니다.
c
d
e
f

+ SkipUntil

: 두 번째 observable이 방출할 때까지 observable이 방출한 항목 버림

let x = PublishSubject<String>() // 현재 observable
let y = PublishSubject<String>() // 다음 observable

x 
    .skip(until: y)
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

x.onNext("a")
x.onNext("b")
y.onNext("y")
x.onNext("c")

// 실행 시 다음을 출력합니다
c

5. Take

: skip의 반대로 observable이 방출한 처음 n개만 내보냄

Observable.of("a","b","c","d","e","f")
    .take(4)
    .subscribe (onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

// 실행 시 다음을 출력합니다
a
b
c
d

+ TakeWhile

: 조건이 false가 될 때까지 observable이 방출한 항목 내보냄

Observable.of("a","b","c","d","e","f")
    .take(while: {$0 != "c"})
    .subscribe (onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

// 실행 시 다음을 출력합니다.
a
b

+ TakeUntil

: 두 번째 observable이 항목을 배출하거나 종료하면 기존 observable이 배출한 항목을 모두 버림

let x = PublishSubject<String>() // 현재 observable
let y = PublishSubject<String>() // 다음 observable

x
    .take(until: y)
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

x.onNext("a")
x.onNext("b")
y.onNext("y")
x.onNext("c")

// 실행 시 다음을 출력합니다.
a
b

6. DistinctUntilChanged

: 중복된 항목을 연달아 방출할 때 중복된 값을 막음

Observable.of("a","b","c","c","c","d","e","e","e","c","f")
    .distinctUntilChanged()
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: disposeBag)

// 실행 시 다음을 출력합니다.
a
b
c
d
e
c
f

출처 - ReactiveX

0개의 댓글