RxSwift官方使用示例之<转换操作符>

本文是示例主要来自于官方的实例代码,可从这里下载 ,实例代码稍有改动。其中的图片来自于reactivex.io/

本文主要的作用是查看实例代码并查看对应实例代码的效果,不需要运行项目

map

将转换闭包应用于由 Observable 序列发出的元素,并返回转换后元素的新 Observable 序列

image.png

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

打印

1
4
9

flatMap 和 flatMapLatest

个人理解: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

从一个初始种子值开始,然后对 Observable 序列发出的每个元素应用一个累加器闭包,并将每个中间结果作为一个元素 Observable 序列返回

image.png

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

猜你喜欢

转载自juejin.im/post/7117938639002140680