この記事の例は、主に公式のサンプルコードからのものであり、ここからダウンロードできます。サンプルコードは少し変更されています。写真はreactivex.io/からのものです
この記事の主な機能は、プロジェクトを実行せずに、サンプルコードを表示し、対応するサンプルコードの効果を表示することです。
地図
シーケンスによって放出された要素に変換クロージャを適用し、変換された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=マップ+マージ;flatMapLatest=マップ+ switchLatest
let disposeBag = DisposeBag()
struct Player {
init(score: Int) {
self.score = BehaviorSubject(value: score)
}
let score: BehaviorSubject<Int>
}
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
スキャン
初期シード値から開始し、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