ios

转换操作

2017-08-09  本文已影响16人  你家旭哥

转换可观察队列发出的Next事件里元素的操作

map

将转换闭包应用于可观察序列发出的元素,并返回已转换元素的一个新的可观察序列。

let disposeBag = DisposeBag()
Observable.of(1, 2, 3)
    .map { $0 * $0 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

flatMap and flatMapLatest

还记得之前的switchLatestflatMapLatest就是mapswitchLatest的组合,flatMap就是把Latest去掉。
官方解释是这样的:将Observable队列发出的元素转换成一个新的可观察队列,并将两者的输出组合成一个新的可观察队列,意思就是说会监听原队列,也会监听你闭包中转换过的队列。flatMapLatest不同的就是会监听最近的队列。(队列被改掉了)

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  // 会有响应

player.value = 👧🏼    // 这边也会有响应  监听了两个组合队列

👦🏻.score.value = 95 // Will be printed when using flatMap, but will not be printed when using flatMapLatest

👧🏼.score.value = 100

scan

以初始值开始,然后将一个累加器闭包应用于可观察序列所发射的每个元素,并将每个中间结果作为一个元素可观察序列返回。看例子

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

过滤和条件操作

上一篇下一篇

猜你喜欢

热点阅读