[RxSwift教程]10、条件和布尔操作符:amb、takeWhile、skipWhile等
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(let_us_code)
➤博主域名:https://www.zengqiang.org
➤GitHub地址:https://github.com/strengthen/LeetCode
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
强烈推荐!!!试用博主个人App作品!提需求!提建议!
App Store搜索:【Mind Draft】
中国区可直接点击跳转:【Mind Draft】
十、条件和布尔操作符(Conditional and Boolean Operators)
条件和布尔操作会根据条件发射或变换 Observables,或者对他们做布尔运算。
1,amb
(1)基本介绍
- 当传入多个 Observables 到 amb 操作符时,它将取第一个发出元素或产生事件的 Observable,然后只发出它的元素。并忽略掉其他的 Observables。
(2)使用样例
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
let disposeBag = DisposeBag()let subject1 = PublishSubject<Int>()let subject2 = PublishSubject<Int>()let subject3 = PublishSubject<Int>()subject1 .amb(subject2) .amb(subject3) .subscribe(onNext: { print($0) }) .disposed(by: disposeBag)subject2.onNext(1)subject1.onNext(20)subject2.onNext(2)subject1.onNext(40)subject3.onNext(0)subject2.onNext(3)subject1.onNext(60)subject3.onNext(0)subject3.onNext(0) |
运行结果如下:
2,takeWhile
(1)基本介绍
- 该方法依次判断 Observable 序列的每一个值是否满足给定的条件。 当第一个不满足条件的值出现时,它便自动完成。
(2)使用样例
|
1
2
3
4
5
6
|
let disposeBag = DisposeBag()Observable.of(2, 3, 4, 5, 6) .takeWhile { $0 < 4 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) |
3,takeUntil
(1)基本介绍
- 除了订阅源 Observable 外,通过 takeUntil 方法我们还可以监视另外一个 Observable, 即 notifier。
- 如果 notifier 发出值或 complete 通知,那么源 Observable 便自动完成,停止发送事件。
(2)使用样例
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
let disposeBag = DisposeBag()let source = PublishSubject<String>()let notifier = PublishSubject<String>()source .takeUntil(notifier) .subscribe(onNext: { print($0) }) .disposed(by: disposeBag)source.onNext("a")source.onNext("b")source.onNext("c")source.onNext("d")//停止接收消息notifier.onNext("z")source.onNext("e")source.onNext("f")source.onNext("g") |
4,skipWhile
(1)基本介绍
- 该方法用于跳过前面所有满足条件的事件。
- 一旦遇到不满足条件的事件,之后就不会再跳过了。
(2)使用样例
|
1
2
3
4
5
6
7
8
|
let disposeBag = DisposeBag()Observable.of(2, 3, 4, 5, 6) .skipWhile { $0 < 4 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) }} |
5,skipUntil
(1)基本介绍
- 同上面的 takeUntil 一样,skipUntil 除了订阅源 Observable 外,通过 skipUntil 方法我们还可以监视另外一个 Observable, 即 notifier 。
- 与 takeUntil 相反的是。源 Observable 序列事件默认会一直跳过,直到 notifier 发出值或 complete 通知。
(2)使用样例
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
let disposeBag = DisposeBag()let source = PublishSubject<Int>()let notifier = PublishSubject<Int>()source .skipUntil(notifier) .subscribe(onNext: { print($0) }) .disposed(by: disposeBag)source.onNext(1)source.onNext(2)source.onNext(3)source.onNext(4)source.onNext(5)//开始接收消息notifier.onNext(0)source.onNext(6)source.onNext(7)source.onNext(8)//仍然接收消息notifier.onNext(0)source.onNext(9) |











浙公网安备 33010602011771号