Swift - RxSwift的使用詳解10(條件和布林操作符:amb、takeWhile、skipWhile等)
十、條件和布林操作符(Conditional and Boolean Operators)
條件和布林操作會根據條件發射或變換 Observables
,或者對他們做布林運算。
1,amb
(1)基本介紹
- 當傳入多個
Observables
到amb
操作符時,它將取第一個發出元素或產生事件的Observable
,然後只發出它的元素。並忽略掉其他的Observables
。
(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)
執行結果如下:
2,takeWhile
(1)基本介紹
- 該方法依次判斷
Observable
序列的每一個值是否滿足給定的條件。 當第一個不滿足條件的值出現時,它便自動完成。
(2)使用樣例
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)使用樣例
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)使用樣例
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)使用樣例
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)
執行結果如下:
相關文章
- 條件和布林操作符
- RxJava 學習筆記 -- 條件操作符和布林操作符RxJava筆記
- LINQ中的陷阱--TakeWhile&SkipWhileWhile
- Swift 條件語句講解Swift
- 布林線的用法圖解:如何運用布林線逃頂和抄底圖解
- linux if [條件] 詳解Linux
- C#快速入門教程(10)——布林型別與布林運算C#型別
- IE條件註釋詳解
- 布林帶策略
- linux 條件變數詳解Linux變數
- C++中條件操作符巢狀C++巢狀
- 【開發篇sql】 條件和表示式(三) Null詳解SQLNull
- TypeScript 布林型別TypeScript型別
- SCSS 布林 型別CSS型別
- 操作符詳解
- Python if else條件語句詳解Python
- 佩奇和布林讓Google成功的13大奇招Go
- C++ 數學函式、標頭檔案及布林型別詳解C++函式型別
- c#按位操作符&^|與邏輯條件操作符運算子&&_||_?:C#
- 面試題:布林變數面試題變數
- HTML 布林屬性值HTML
- 布林代數入門
- java 操作符詳解Java
- Qt5.9中QObject::connect()函式用法(函式使用的前提條件和引數詳解)QTObject函式
- 5.注意Dart中的布林值Dart
- 聊聊快取布林值踩到的坑快取
- 元組、布林、集合的內建方法
- MySQL條件判斷IF,CASE,IFNULL語句詳解MySqlNull
- 你好,布林瑪!(Blazor元件庫)Blazor元件
- python-布林運算Python
- 布林線指標(轉載)指標
- 條件和排序排序
- 詳解布隆過濾器的原理和實現過濾器
- 詳解 JavaScript 建構函式和 "new" 操作符JavaScript函式
- == 和 === 操作符詳細解析
- OpenStack的Swift元件詳解Swift元件
- Go的100天之旅-07條件和迴圈Go
- 「譯」編寫更好的 JavaScript 條件式和匹配條件的技巧JavaScript