RxSwift|RxSwift 条件和布尔操作符(Conditional and Boolean Operators)
条件和布尔操作会根据条件发射或变换Observables
,或者对他们做布尔运算。
1.amb
当你传入多个Observables
到amb
操作符时,它将取其中一个Observable
:第一个产生事件的那个Observable
,可以是一个next
,error
或者completed
事件。amb
将忽略掉其他的Observables
。
文章图片
image.png
let disposeBag = DisposeBag()let subject1 = PublishSubject()
let subject2 = PublishSubject()
let subject3 = PublishSubject()subject1.amb(subject2)
.amb(subject3)
.subscribe{ print($0.element!) }
.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)
运行结果:
1
2
3
2. takeWhile 该方法依次判断
Observable
序列的每一个值是否满足给定的条件。 当第一个不满足条件的值出现时,它便自动完成。
文章图片
image.png
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
3. takeUntil
takeUntil
操作符将镜像源Observable
,它同时观测第二个Observable
。一旦第二个Observable
发出一个元素或者产生一个终止事件,那个镜像的Observable
将立即终止。
文章图片
takeUntil.png
let disposeBag = DisposeBag()let subject1 = PublishSubject()
let subject2 = PublishSubject()subject1.takeUntil(subject2)
.subscribe { print($0) }
.disposed(by: disposeBag)subject1.onNext("A")
subject1.onNext("B")
subject2.onNext("我可以让它中止")
subject1.onNext("C")
结果如下:
next(A)
next(B)
completed
4. skipUntil
- 同上面的
takeUntil
一样,skipUntil
除了订阅源Observable
外,通过skipUntil
方法我们还可以监视另外一个Observable
, 即notifier
。 - 与
takeUntil
相反的是。源Observable
序列事件默认会一直跳过,直到notifier
发出值或 complete 通知

文章图片
image.png
let disposeBag = DisposeBag()let subject = PublishSubject()
let notifier = PublishSubject()subject.skipUntil(notifier)
.subscribe (onNext: { print($0) })
.disposed(by: disposeBag)subject.onNext("A")
subject.onNext("B")
notifier.onNext("接收消息")
subject.onNext("C")
subject.onNext("D")
subject.onNext("E")
notifier.onNext("接收消息")
subject.onNext("F")
结果如下:
C
D
E
F
5. skipWhile
skipWhile
操作符可以让你忽略源Observable
中头几个元素,直到元素的判定为否。
文章图片
image.png
let disposeBag = DisposeBag()Observable.of(1, 3, 6, 4, 7, 2)
.skipWhile{ $0 < 5 }
.subscribe(onNext: {print($0)})
.disposed(by: disposeBag)
【RxSwift|RxSwift 条件和布尔操作符(Conditional and Boolean Operators)】结果如下:
6
4
7
2
推荐阅读
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任
- 2020-04-07vue中Axios的封装和API接口的管理
- 烦恼和幸福