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筆記
- python中if條件語句對於布林值和非布林值的判斷結果Python
- Swift 條件語句講解Swift
- 布林線的用法圖解:如何運用布林線逃頂和抄底圖解
- C#快速入門教程(10)——布林型別與布林運算C#型別
- Python if else條件語句詳解Python
- 操作符詳解
- 布林帶策略
- OpenStack的Swift元件詳解Swift元件
- 詳解 JavaScript 建構函式和 "new" 操作符JavaScript函式
- C++ 數學函式、標頭檔案及布林型別詳解C++函式型別
- TypeScript 布林型別TypeScript型別
- MySQL條件判斷IF,CASE,IFNULL語句詳解MySqlNull
- 詳解布隆過濾器的原理和實現過濾器
- 「譯」編寫更好的 JavaScript 條件式和匹配條件的技巧JavaScript
- Swift + RxSwift MVVM 模組化專案實踐SwiftMVVM
- 一文詳解Python字串條件判斷方法Python字串
- 【SQL】SQL中if條件的使用SQL
- ES-布林查詢
- Boost 矩形布林運算
- HTML 布林屬性值HTML
- Solidity語言學習筆記————10、布林型、整型Solid筆記
- Kotlin 資料型別詳解:數字、字元、布林值與型別轉換指南Kotlin資料型別字元
- RabbitMQ的詳解和使用MQ
- 元組、布林、集合的內建方法
- 聊聊快取布林值踩到的坑快取
- 5.注意Dart中的布林值Dart
- Swift 5 Type Metadata 詳解Swift
- 談談raft fig8 —— 迷惑的提交條件和選舉條件Raft
- 關聯條件的業務使用
- 程式返回條件的0和1
- 從布林值到異常
- 面試題:布林變數面試題變數
- 你好,布林瑪!(Blazor元件庫)Blazor元件
- Java併發包原始碼學習系列:詳解Condition條件佇列、signal和awaitJava原始碼佇列AI
- 05 Windows批處理中的字串和布林資料型別Windows字串資料型別
- Spring條件註解@ConditionalSpring