1. debounce
- 짧은 시간 동안 새로운 이벤트가 발생하면 이전 이벤트들을 무시하고 마지막 이벤트만 방출
let subject = PublishSubject<String>()
subject
.debounce(.seconds(1), scheduler: MainScheduler.instance)
.subscribe(onNext: {
print("Debounced: \($0)")
})
.disposed(by: disposeBag)
subject.onNext("A")
subject.onNext("B")
subject.onNext("C") // 1초 후 "C"만 출력됨
2. distinctUntilChanged
Observable.of("A", "B", "A", "C", "B", "D", "A")
.distinct()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
// A
// B
// C
// D
3. elementAt
Observable.of("A", "B", "C", "D")
.element(at: 2)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
4. filter
Observable.of(1, 2, 3, 4, 5)
.filter { $0 % 2 == 0 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
// 2
// 4
5. first/last
Observable.of("A", "B", "C")
.first() // .last()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
// A / C
6. ignoreElements
- 모든 요소를 무시하고 완료 또는 오류 이벤트만 전달
Observable.of("A", "B", "C")
.ignoreElements()
.subscribe(onCompleted: {
print("Completed")
})
.disposed(by: disposeBag)
// Completed
7. sample
- 기준이 되는 Observable의 가장 최근의 요소를 방출합니다.
let source = PublishSubject()
let trigger = PublishSubject()
source
.sample(trigger)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
source.onNext("A")
source.onNext("B")
trigger.onNext(()) // "B" 방출
source.onNext("C")
source.onNext("D")
trigger.onNext(()) // "D" 방출
8. skip
Observable.of("A", "B", "C", "D")
.skip(2)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
// C D
9. skipLast
Observable.of("A", "B", "C", "D")
.skipLast(2)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
// A B
10. take
- 처음 n개의 요소만 방출하고 이후 요소는 무시
Observable.of("A", "B", "C", "D")
.take(2)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
// C D
11. takeLast
Observable.of("A", "B", "C", "D")
.takeLast(2)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
// C D