.next
이벤트를 통해 받아오는 값을 선택적으로 취할 수 있다.
목차
- Ignoring operators
-.ignoreElements
-.elementAt
-.filter
- Skipping operators
-.skip
-.skipWhile
-.skipUntil
ignoreElements
는 .next
이벤트를 무시한다.completed
, .error
와 같은 정지 이벤트는 허용한다. example(of: "ignoreElements") {
// 1
let strikes = PublishSubject<String>()
let disposeBag = DisposeBag()
// 2
strikes
.ignoreElements()
.subscribe({ _ in
print("You're out!")
})
.disposed(by: disposeBag)
// 3
strikes.onNext("X")
strikes.onNext("X")
strikes.onNext("X")
// 4
strikes.onCompleted()
}
String
값을 방출하는 PublishSubject
와 DisposeBag
을 생성.subcribe
를 하는데, 이전에 .igmoreElements()
를 넣는다. 아직 아무것도 프린트되지 않는다.onNext
이벤트를 추가해도 정보가 방출되지 않는다.strikes
를 onCompleted()
한다. print문이 출력된다.
elementAt()
을 쓴다. example(of: "elementAt") {
// 1
let strikes = PublishSubject<String>()
let disposeBag = DisposeBag()
// 2
strikes
.elementAt(2)
.subscribe(onNext: { _ in
print("You're out!")
})
.disposed(by: disposeBag)
// 3
strikes.onNext("X")
strikes.onNext("X")
strikes.onNext("X")
}
PublishSubject
와 DisposeBag
을 생성한다..subcribe
전에 .elementAt(2)
를 추가한다. 2번 index값을 방출한다..completed
, .error
가 아니어도 print문이 출력된다.
example(of: "filter") {
let disposeBag = DisposeBag()
// 1
Observable.of(1,2,3,4,5,6)
// 2
.filter({ (int) -> Bool in
int % 2 == 0
})
// 3
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
}
Int
를 받는 observable 생성subscribe
해서 방출된 요소를 출력 example(of: "skip") {
let disposeBag = DisposeBag()
// 1
Observable.of("A", "B", "C", "D", "E", "F")
// 2
.skip(3)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
}
String
타입의 Observable 생성subscribe
한다. 처음부터 3개까지의 요소들을 제외하고 D, E, F가 출력된다.swift
의 while
문과 비슷하게 조건에 맞는 값들이 나오는 동안에는 계속 skip하고, 조건에 맞지 않는 값이 나오면 skip을 멈추고 그 뒤로는 모두 방출한다. example(of: "skipWhile") {
let disposeBag = DisposeBag()
// 1
Observable.of(2, 2, 3, 4, 4)
//2
.skipWhile({ (int) -> Bool in
int % 2 == 0
})
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
}
Observable
생성subscribe
로 넘어가서 첫 홀수인 3
부터 끝까지 방출.next
이벤트를 방출할 때까지 현재 observable의 이벤트를 skip한다. example(of: "skipUntil") {
let disposeBag = DisposeBag()
// 1
let subject = PublishSubject<String>()
let trigger = PublishSubject<String>()
// 2
subject
.skipUntil(trigger)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
// 3
subject.onNext("A")
subject.onNext("B")
// 4
trigger.onNext("X")
// 5
subject.onNext("C")
}
suject
, trigger
PublishSubject 생성.subscribe
전에 .skipUntil
을 통해 trigger
등록subject
에 이벤트 추가. 하지만 아직 trigger
가 작동하지 않은.skipUntil
이 막고 있기 때문에 방출되지 않는다.trigger
에 이벤트 추가를 했기 때문에, 막혀있던 .skipUntil
이 풀린다.C
이벤트 방출👉 이어지는 글
RxSwift - Filtering Operators(2)