Die Beispiele in diesem Artikel stammen hauptsächlich aus dem offiziellen Beispielcode, der hier heruntergeladen werden kann Der Beispielcode wurde leicht modifiziert. Die Bilder sind vonreaktivex.io/
Die Hauptfunktion dieses Artikels besteht darin, den Beispielcode anzuzeigen und die Auswirkungen des entsprechenden Beispielcodes anzuzeigen, ohne das Projekt auszuführen
Karte
wendet einen Transformationsabschluss auf die von der Observable
Sequenz und gibt eine neue Observable
Sequenz transformierter Elemente zurück
let disposeBag = DisposeBag()
Observable.of(1, 2, 3)
.map { $0 * $0 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
1
4
9
flatMap und flatMapLatest
Persönliches Verständnis: flatMap = map + merge ; flatMapLatest = map + 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
Scan
Beginnen Sie mit einem Anfangswert, wenden Sie dann einen Akkumulatorabschluss auf jedes Element an, das von der Observable
Sequenz Observable
und geben Sie jedes Zwischenergebnis als Elementsequenz zurück
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