Los ejemplos de este artículo provienen principalmente del código de ejemplo oficial, que se puede descargar desde aquí El código de ejemplo se ha modificado ligeramente. Las imágenes son de reactivex.io/
La función principal de este artículo es ver el código de ejemplo y ver el efecto del código de ejemplo correspondiente, sin ejecutar el proyecto.
mapa
aplica un cierre de transformación a los elementos emitidos por la Observable
secuencia y devuelve una nueva Observable
secuencia de elementos transformados
let disposeBag = DisposeBag()
Observable.of(1, 2, 3)
.map { $0 * $0 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
Impresión
1
4
9
flatMap y flatMapLatest
Comprensión personal: 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)
}
Impresión
80
85
90
95
100
escanear
Comience con un valor semilla inicial, luego aplique un cierre acumulador a cada elemento emitido por la Observable
secuencia y devuelva cada resultado intermedio como una Observable
secuencia de elementos
let disposeBag = DisposeBag()
Observable.of(10, 100, 1000)
.scan(1) { aggregateValue, newValue in
aggregateValue + newValue
}
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
Impresión
11
111
1111