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

条件和布尔操作会根据条件发射或变换Observables,或者对他们做布尔运算。

1.amb

当你传入多个Observablesamb操作符时,它将取其中一个Observable:第一个产生事件的那个Observable,可以是一个nexterror或者completed事件。amb将忽略掉其他的Observables

RxSwift 条件和布尔操作符(Conditional and Boolean Operators)_第1张图片
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 条件和布尔操作符(Conditional and Boolean Operators)_第2张图片
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 条件和布尔操作符(Conditional and Boolean Operators)_第3张图片
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 条件和布尔操作符(Conditional and Boolean Operators)_第4张图片
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 条件和布尔操作符(Conditional and Boolean Operators)_第5张图片
image.png

let disposeBag = DisposeBag()

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

结果如下:

6
4
7
2

你可能感兴趣的:(RxSwift 条件和布尔操作符(Conditional and Boolean Operators))