RxSwift中包括了:
- filter
- distinctUntilChanged
- elementAt
- single
- take
- takeLast
- takeWhile
- takeUntil
- skip
- skipWhile
- skipWhileWithIndex
- skipUntil
filter
在Observable序列中只发出满足过滤条件的事件。
Observable.of(1,2,3,4,5).filter({
$0 > 2
}).subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
打印结果:
3
4
5
distinctUntilChanged
过滤连续发出的相同事件
Observable.of(1,2,3,3,3,2,2,5,4).distinctUntilChanged().subscribe({print($0)}).disposed(by: disposeBag)
结果:
next(1)
next(2)
next(3)
next(2)
next(5)
next(4)
completed
elementAt
Observable只发出指定位置的事件
Observable.of(1,2,3,4,5).elementAt(2).subscribe(onNext: {print($0)}).disposed(by: disposeBag)
打印结果
3
completed
single
用法一:检测Observable序列是否发射一个元素。如果发射多个,会报错。
// error:Sequence contains more than one element
// Observable.of(1,2,3).single().subscribe(onNext: {print($0)}).disposed(by: disposeBag)
Observable.of(1).single().subscribe(onNext: {print($0)}).disposed(by: disposeBag)
用法二:检测Observable序列发射的元素里面是否包含多个指定的元素,如果有多个或者没有,会报错。
Observable.of("🐱", "🐰","🐶","🐸","🐽","🐒")
.single({
$0 == "🐸"
}).subscribe({
print($0)
}).disposed(by: disposeBag)
Observable.of("🐱", "🐰", "🐶", "🐱", "🐰", "🐶")
.single { $0 == "🐒" }
.subscribe { print($0) }
.disposed(by: disposeBag)
Observable.of("🐱", "🐰", "🐶", "🐶","🐸")
.single { $0 == "🐶" }
.subscribe { print($0) }
.disposed(by: disposeBag)
打印结果:
next(🐸)
completed
error(Sequence doesn't contain any elements.)
next(🐶)
error(Sequence contains more than one element.)
take
从Observable序列开始点起只处理前几个事件。
Observable.of(1,2,3).take(2).subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
打印结果:
1
2
takeLast
与take相反,从Observable序列的结束位置起,只处理前几个事件。
Observable.of("🐱", "🐰", "🐶", "🐶","🐸")
.takeLast(3)
.subscribe { print($0) }
.disposed(by: disposeBag)
打印结果
next(🐶)
next(🐶)
next(🐸)
completed
takeWhile
只处理满足条件的事件。感觉和filter没什么区别
Observable.of(1,2,3,4,5).takeWhile{$0 < 3}.subscribe(onNext: {print($0)}).disposed(by: disposeBag)
打印结果
1
2
takeUntil
直到另一个Observable序列发出一个信号,则原序列终止。
let orinSubject = PublishSubject<Int>()
let refreSubject = PublishSubject<Int>()
orinSubject.takeUntil(refreSubject).subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
orinSubject.onNext(1)
orinSubject.onNext(2)
refreSubject.onNext(10)
orinSubject.onNext(3)
打印结果
1
2
skip
从Observable序列的元素跳过指定个数。
Observable.of(1,2,3,4,5,6).skip(2).subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
打印结果:
3
4
5
6
skipWhile
跳过满足条件的事件,只要遇见不满足条件的事件,则该事件以及之后的事件(不管是否满足条件)都会发出。
Observable.of(1,2,3,4,5,6).skipWhile({
$0 < 3
}).subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
打印结果与上面相同
skipWhileWithIndex
跳过索引满足条件的事件。
Observable.of(1,2,3,4,5,6).skipWhileWithIndex({ (element, index) -> Bool in
index < 3
}).subscribe(onNext: {print($0)}).disposed(by: disposeBag)
打印结果:
4
5
6
此方法在新版本中已经被抛弃
skipUntil
跳过另一个Observable序列发出事件之前的所有事件。与takeUntil相反。
let orinSubject = PublishSubject<Int>()
let refreSubject = PublishSubject<Int>()
orinSubject.skipUntil(refreSubject).subscribe(onNext: {
print($0)
}).disposed(by: disposeBag)
orinSubject.onNext(1)
orinSubject.onNext(2)
refreSubject.onNext(10)
orinSubject.onNext(3)
orinSubject.onNext(4)
打印结果
3
4