Swift - RxSwift的使用詳解10(條件和布林操作符:amb、takeWhile、skipWhile等)

weixin_34290000發表於2018-03-17

十、條件和布林操作符(Conditional and Boolean Operators)

條件和布林操作會根據條件發射或變換 Observables,或者對他們做布林運算。

1,amb

(1)基本介紹

  • 當傳入多個 Observablesamb 操作符時,它將取第一個發出元素或產生事件的 Observable,然後只發出它的元素。並忽略掉其他的 Observables
3788243-bb8fb6e136db7463..png

(2)使用樣例

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)

執行結果如下:

3788243-121e2fb93c929afb..png

2,takeWhile

(1)基本介紹

  • 該方法依次判斷 Observable 序列的每一個值是否滿足給定的條件。 當第一個不滿足條件的值出現時,它便自動完成。
3788243-b0d68581b7cd69f8..png

(2)使用樣例

let disposeBag = DisposeBag()
 
Observable.of(2, 3, 4, 5, 6)
    .takeWhile { $0 < 4 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

執行結果如下:

3788243-493eca621540c3df..png

3,takeUntil

(1)基本介紹

  • 除了訂閱源 Observable 外,通過 takeUntil 方法我們還可以監視另外一個 Observable, 即 notifier
  • 如果 notifier 發出值或 complete 通知,那麼源 Observable 便自動完成,停止傳送事件。
3788243-497123f20e6d5cce..png

(2)使用樣例

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")

執行結果如下:

3788243-685611d025920553..png

4,skipWhile

(1)基本介紹

  • 該方法用於跳過前面所有滿足條件的事件。
  • 一旦遇到不滿足條件的事件,之後就不會再跳過了。
3788243-5b3971e6f3dbeb58..png

(2)使用樣例

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

執行結果如下:

3788243-b641a0b807a571a2..png

5,skipUntil

(1)基本介紹

  • 同上面的 takeUntil 一樣,skipUntil 除了訂閱源 Observable 外,通過 skipUntil方法我們還可以監視另外一個 Observable, 即 notifier
  • takeUntil 相反的是。源 Observable 序列事件預設會一直跳過,直到 notifier 發出值或 complete 通知。
3788243-48869d2152e59834..png

(2)使用樣例

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)

執行結果如下:

3788243-7cdb7e568f31e35b..png

RxSwift使用詳解系列
原文出自:www.hangge.com轉載請保留原文連結

相關文章