RxSwift -- 变换

如果我们想对获取到的事件进行转换, 我们就需要变换, 例如将一个数字变为字符

map

和数组的 map 类似,可以将类型进行转换

Observable.from([1,2,3,4,5])
    .map{"num is :\($0)"}
    .subscribe { (event) in
    self.print(event)
    }.disposed(by: disposeBag)

flatMap

flatMap 可以将一个一个可观察者对象转换为另一个, 例如, 你在某种情况下返回失败你可以这样

Observable.of(1,2,3,4,5)
    .flatMap{ $0 == 3 ? Observable.error(RxError.unknown) : Observable.just($0) }
    .subscribe { (event) in
        self.print(event)
    }.disposed(by: disposeBag)

scan

scan 类似于序列的 reduce 操作, 不同的是, 他会把每次的值都发送出来

Observable.of(1,2,3,4,5)
    .scan(0) { $0 + $1 }
    .subscribe { (event) in
        self.print(event)
    }.disposed(by: disposeBag)

输出 1, 3, 6, 10, 15

你可能感兴趣的:(RxSwift -- 变换)