RxSwift|RxSwift 条件和布尔操作符(Conditional and Boolean Operators)

条件和布尔操作会根据条件发射或变换Observables,或者对他们做布尔运算。
1.amb 当你传入多个Observablesamb操作符时,它将取其中一个Observable:第一个产生事件的那个Observable,可以是一个nexterror或者completed事件。amb将忽略掉其他的Observables

RxSwift|RxSwift 条件和布尔操作符(Conditional and Boolean Operators)
文章图片
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序列的每一个值是否满足给定的条件。 当第一个不满足条件的值出现时,它便自动完成。

RxSwift|RxSwift 条件和布尔操作符(Conditional and Boolean Operators)
文章图片
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将立即终止。
RxSwift|RxSwift 条件和布尔操作符(Conditional and Boolean Operators)
文章图片
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 通知
RxSwift|RxSwift 条件和布尔操作符(Conditional and Boolean Operators)
文章图片
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中头几个元素,直到元素的判定为否。

RxSwift|RxSwift 条件和布尔操作符(Conditional and Boolean Operators)
文章图片
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

    推荐阅读