转换 观察量序列 发出的next信号 元素的 运算符
将接收的信号的值 做出处理 再传递下去
func rx_map(){ let disposeBag = DisposeBag() let aObserable = Observable<String>.create { (observe) -> Disposable in observe.onNext("-1") observe.onNext("10") observe.onNext("5") observe.onCompleted() return Disposables.create() } let bObserable = Observable<String>.create { (observe) -> Disposable in observe.onNext("2") observe.onNext("3") observe.onNext("4") observe.onCompleted() return Disposables.create() } // 这里解释一下{(a,b) in (a,b) },第一个(a,b)是形参,第二个(a,b)是一个泛型 也可以说是自定义类型有两个元素a和b Observable.zip(aObserable,bObserable){(a,b) in (a,b) } // 就是将接收的信号元素 做出处理 再返回新的 元素 .map { (Int)($0.0)! + (Int)($0.1)! } .subscribe{print($0)} .addDisposableTo(disposeBag) } 打印: next(1) next(13) next(9) completed将接收的观察量信号 的元素 作为参数,返回一个新的观察量序列 可以理解成重写 观察量序列的方法
func rx_flatMap(){ let disposeBag = DisposeBag() let aObservable = Observable<String>.create{ observe in observe.onNext("橘子酒") observe.onNext("苹果酒") observe.onNext("红粉佳人") observe.onCompleted() return Disposables.create() } aObservable.flatMap { (x:String) -> Observable<String> in return Observable<String>.create{observe in let xx = x + "来一杯" observe.onNext(xx) return Disposables.create() } } .subscribe{print($0)} .addDisposableTo(disposeBag) } 打印结果 next(橘子酒来一杯) next(苹果酒来一杯) next(红粉佳人来一杯)flatMap可以同时 订阅合成来源序列的每一个,flatMapLatest只能订阅合成里最新的
let vari1 = Variable("1-0") let vari2 = Variable("2-0") let vari = Variable(vari1) // 第一种flatMapLatest vari.asObservable().flatMapLatest { x in x.asObservable() } // 第二种 //vari.asObservable().flatMap { x in //x.asObservable() //} .subscribe{print($0)} .addDisposableTo(disposeBag) vari1.value = "1-1" vari2.value = "2-11" vari.value = vari2 vari2.value = "2-1" vari1.value = "1-11" 打印结果 第一种 next(1-0) next(1-1) next(2-11) next(2-1) completed 打印结果 第二种 next(1-0) next(1-1) next(2-11) next(2-1) next(1-11) completed观察量序列 把每次的运算结果累积起来,作为下一次运算的输入值,第一次的时候上次结果取 scan设置的默认值
func rx_scan(){ let disposeBag = DisposeBag() Observable.of("连续","超神","五杀") .scan("排位赛", accumulator: {(a,b) in a+b }) .subscribe{print($0)} .addDisposableTo(disposeBag) } 打印结果 next(排位赛连续) next(排位赛连续超神) next(排位赛连续超神五杀) completed