RxSwift官方使用示例之<轉換操作符>

語言: CN / TW / HK

本文是示例主要來自於官方的例項程式碼,可從這裡下載 ,例項程式碼稍有改動。其中的圖片來自於reactivex.io/

本文主要的作用是檢視例項程式碼並檢視對應例項程式碼的效果,不需要執行專案

map

將轉換閉包應用於由 Observable 序列發出的元素,並返回轉換後元素的新 Observable 序列

image.png

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 序列返回

image.png ``` 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