RxSwift官方使用示例之<轉換操作符>
本文是示例主要來自於官方的例項程式碼,可從這裡下載 ,例項程式碼稍有改動。其中的圖片來自於reactivex.io/
本文主要的作用是檢視例項程式碼並檢視對應例項程式碼的效果,不需要執行專案
map
將轉換閉包應用於由 Observable
序列發出的元素,並返回轉換後元素的新 Observable
序列
let disposeBag = DisposeBag()
Observable.of(1, 2, 3)
.map { $0 * $0 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
列印
1
4
9
flatMap 和 flatMapLatest
個人理解:flatMap = map + merge; flatMapLatest = map + switchLatest
``` let disposeBag = DisposeBag()
struct Player {
init(score: Int) {
self.score = BehaviorSubject(value: score)
}
let score: BehaviorSubject
let A = Player(score: 80) let B = Player(score: 90)
let player = BehaviorSubject(value: A)
player.asObservable() .flatMap { $0.score.asObservable() } // Change flatMap to flatMapLatest and observe change in printed output .subscribe(onNext: { print($0) }) .disposed(by: disposeBag)
A.score.onNext(85)
player.onNext(B)
A.score.onNext(95) // Will be printed when using flatMap, but will not be printed when using flatMapLatest B.score.onNext(100) } ```
列印
80
85
90
95
100
scan
從一個初始種子值開始,然後對 Observable
序列發出的每個元素應用一個累加器閉包,並將每個中間結果作為一個元素 Observable
序列返回
```
let disposeBag = DisposeBag()
Observable.of(10, 100, 1000) .scan(1) { aggregateValue, newValue in aggregateValue + newValue } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) ``` 列印
11
111
1111