RxSwfit 学习笔记(七)筛选操作符,filter、take、skip等

336 阅读1分钟

这一篇的内容较为简单,但是为了内容的完整性,还是发出来了。

有想法的可以自行翻阅《RxSwift中文文档》

filter

发出 Observable 中通过判定的元素

let disposeBag = DisposeBag()

Observable.of(2, 30, 22, 5, 60, 1)
          .filter { $0 > 10 }
          .subscribe(onNext: { print($0) })
          .disposed(by: disposeBag)

打印结果:

33
22
60

take

从 Observable 中发出头 n 个元素

let disposeBag = DisposeBag()

Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
    .take(3)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

打印结果:

🐱
🐰
🐶

takeLast

从 Observable 中发出尾部 n 个元素

let disposeBag = DisposeBag()

Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
    .takeLast(3)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

打印结果:

🐸
🐷
🐵

elementAt

只发出 Observable 中的第 n 个元素

let disposeBag = DisposeBag()

Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
    .elementAt(3)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

打印结果:

🐸

skip

跳过 Observable 中头 n 个元素


let disposeBag = DisposeBag()

Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵")
    .skip(2)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

输出结果:

🐶
🐸
🐷
🐵

skipWhile

跳过 Observable 中头几个元素,直到元素的判定为否

skipWhile 操作符可以让你忽略源 Observable 中头几个元素,直到元素的判定为否后,它才镜像源 Observable。

let disposeBag = DisposeBag()

Observable.of(1, 2, 3, 4, 3, 2, 1)
    .skipWhile { $0 < 4 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

输出结果:

4
3
2
1

skipUntil

跳过 Observable 中头几个元素,直到另一个 Observable 发出一个元素

skipUntil 操作符可以让你忽略源 Observable 中头几个元素,直到另一个 Observable 发出一个元素后,它才镜像源 Observable。

let disposeBag = DisposeBag()

let A = PublishSubject<String>()
let B = PublishSubject<String>()

A.skipUntil(B)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

A.onNext("A - 1")
A.onNext("A - 2")
A.onNext("A - 3")

B.onNext("B - 1")

A.onNext("A - 4")
A.onNext("A - 5")
A.onNext("A - 6")

输出结果:

A - 4
A - 5
A - 6

takeWhile

只取头几个满足判定的元素

let disposeBag = DisposeBag()

Observable.of(1, 2, 3, 4, 3, 2, 1)
    .takeWhile { $0 < 4 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

输出结果:

1
2
3

takeUntil

skipUntil 相反,只发送另外一个Observable发出第一个元素前发出的元素

let disposeBag = DisposeBag()

let A = PublishSubject<String>()
let B = PublishSubject<String>()

A.takeUntil(B)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

A.onNext("A - 1")
A.onNext("A - 2")
A.onNext("A - 3")

B.onNext("B - 1")

A.onNext("A - 4")
A.onNext("A - 5")
A.onNext("A - 6")

输出结果:

A - 1
A - 2
A - 3

distinctUntilChanged

阻止 Observable 发出相同的元素

distinctUntilChanged 操作符将阻止 Observable 发出相同的元素。如果后一个元素和前一个元素是相同的,那么这个元素将不会被发出来。如果后一个元素和前一个元素不相同,那么这个元素才会被发出来。

let disposeBag = DisposeBag()

Observable.of("🐱", "🐷", "🐱", "🐱", "🐱", "🐵", "🐱")
    .distinctUntilChanged()
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
    ```
输出结果:

🐱
🐷
🐱
🐵
🐱