RxSwift (4) 转换符号

9 篇文章 0 订阅

转换 观察量序列 发出的next信号 元素的 运算符

map

将接收的信号的值 做出处理 再传递下去

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
flatMap

将接收的观察量信号 的元素 作为参数,返回一个新的观察量序列
可以理解成重写 观察量序列的方法

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对比

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

观察量序列 把每次的运算结果累积起来,作为下一次运算的输入值,第一次的时候上次结果取 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值