fimuxd/RxSwift를 참고해 정리하는 글입니다 🙂
.next
로 받아오는 이벤트를 선별할 수 있다filter
와 비슷한 느낌.next
로 받아오는 모든 이벤트를 무시completed
나 error
는 허용let strikes = PublishSubject<String>()
let disposeBag = DisposeBag()
strikes
.ignoreElements()
.subscribe({ _ in
print("You're out!")
})
.disposed(by: disposeBag)
strikes.onNext("X")
strikes.onNext("X")
strikes.onNext("X")
strikes.onCompleted() // completed만 됨
let strikes = PublishSubject<String>()
let disposeBag = DisposeBag()
strikes
.element(at: 2)
.subscribe(onNext: { event in
print(event)
})
.disposed(by: disposeBag)
strikes.onNext("A")
strikes.onNext("B")
strikes.onNext("C")
// C
let disposeBag = DisposeBag()
Observable.of(1,2,3,4,5,6)
.filter({ (int) -> Bool in
int % 2 == 0
})
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
// 2
// 4
// 6
let disposeBag = DisposeBag()
Observable.of("A", "B", "C", "D", "E", "F")
.skip(3)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
// D
// E
// F
let disposeBag = DisposeBag()
Observable.of(2, 2, 3, 4, 4)
.skip(while: { (int) -> Bool in
int % 2 == 0
})
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
// 3
// 4
// 4
let disposeBag = DisposeBag()
let subject = PublishSubject<String>()
let trigger = PublishSubject<String>()
subject
.skip(until: trigger)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
subject.onNext("A")
subject.onNext("B")
trigger.onNext("X")
subject.onNext("C")
// C
let disposeBag = DisposeBag()
Observable.of(1,2,3,4,5,6)
.take(3)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
// 1
// 2
// 3
skipWhile
과 비슷하지만 반대로 동작let disposeBag = DisposeBag()
Observable.of(2,2,4,4,6,6)
.enumerated() // 인덱스(index)를 알 수 있게
.take(while: { index, value in
value % 2 == 0 && index < 3
})
.map { $0.element }
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
// 2
// 2
// 4
let disposeBag = DisposeBag()
let subject = PublishSubject<String>()
let trigger = PublishSubject<String>()
// 2
subject
.take(until: trigger)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
subject.onNext("1")
subject.onNext("2")
trigger.onNext("X")
subject.onNext("3")
// 1
// 2
someObservable
.take(until: self.rx.deallocated)
.subscribe(onNext: {
print($0)
})
// self를 뷰컨트롤러나 뷰모델로 하여 dispose에 담는 대신에 구독을 dispose할 수 있음
Observable이 방출하는 중복 항목 억제
let disposeBag = DisposeBag()
Observable.of("A", "A", "B", "B", "A")
.distinctUntilChanged()
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
// A
// B
// A