轉(zhuǎn)換可觀察隊列發(fā)出的Next事件里元素的操作
map
將轉(zhuǎn)換閉包應(yīng)用于可觀察序列發(fā)出的元素杠河,并返回已轉(zhuǎn)換元素的一個新的可觀察序列豪椿。
let disposeBag = DisposeBag()
Observable.of(1, 2, 3)
.map { $0 * $0 }
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
flatMap and flatMapLatest
還記得之前的switchLatest
么flatMapLatest
就是map
跟switchLatest
的組合窑眯,flatMap
就是把Latest
去掉氏淑。
官方解釋是這樣的:將Observable
隊列發(fā)出的元素轉(zhuǎn)換成一個新的可觀察隊列读整,并將兩者的輸出組合成一個新的可觀察隊列拒逮,意思就是說會監(jiān)聽原隊列罐氨,也會監(jiān)聽你閉包中轉(zhuǎn)換過的隊列。flatMapLatest
不同的就是會監(jiān)聽最近的隊列滩援。(隊列被改掉了)
let disposeBag = DisposeBag()
struct Player {
var score: Variable<Int>
}
let ???? = Player(score: Variable(80))
let ???? = Player(score: Variable(90))
let player = Variable(????)
player.asObservable()
.flatMap { $0.score.asObservable() } // Change flatMap to flatMapLatest and observe change in printed output
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
????.score.value = 85 // 會有響應(yīng)
player.value = ???? // 這邊也會有響應(yīng) 監(jiān)聽了兩個組合隊列
????.score.value = 95 // Will be printed when using flatMap, but will not be printed when using flatMapLatest
????.score.value = 100
scan
以初始值開始栅隐,然后將一個累加器閉包應(yīng)用于可觀察序列所發(fā)射的每個元素,并將每個中間結(jié)果作為一個元素可觀察序列返回玩徊∽馇模看例子
let disposeBag = DisposeBag()
Observable.of(10, 100, 1000)
.scan(1) { aggregateValue, newValue in // aggregateValue 之前返回的值
aggregateValue + newValue
}
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag) // 11,111,1111