美文网首页
RxSwift_操作符_withLatestFrom

RxSwift_操作符_withLatestFrom

作者: MR_詹 | 来源:发表于2021-03-10 11:22 被阅读0次

withLatestFrom 操作符将两个 Observables 中最新的元素通过一个函数组合起来,然后将这个组合的结果发出来。当第一个 Observable 发出一个元素时,就立即取出第二个 Observable 中最新的元素,通过一个组合函数将两个最新的元素合并后发送出去。

第一种用法
当第一个firstSubject 发出事件, 就立即取出第二个Observable中最新的元素,然后把第二个Observable中最新的元素发送出去

即:当第一个发出事件时,拿第二个的最新事件发出,如果第二个事件无值,则不处理

let disposeBag = DisposeBag()
let firstSubject = PublishSubject<String>()
let secondSubject = PublishSubject<String>()

firstSubject.withLatestFrom(secondSubject)
    .subscribe(onNext:{
        print($0)
    })
    .disposed(by: disposeBag)

firstSubject.onNext("1")
firstSubject.onNext("2")
secondSubject.onNext("3")
firstSubject.onNext("4")
/// 输出结果:3

第二种用法
当第一个Observable发出一个元素时,就立即取出第二个Observable中最新的元素,将第一个Observable中最新的元素first和第二个Observable中最新的元素second组合,然后把first + second 发送出去

即:可以在第一个Observable发出元素时,取出第一个Observable的元素和第二个Observable最新元素组合成一个新的Observable

let disposeBag = DisposeBag()
let firstSubject = PublishSubject<String>()
let secondSubject = PublishSubject<String>()

firstSubject.withLatestFrom(secondSubject) { (first,second) in
    return "\(first),\(second)"
}
.subscribe(onNext:{
    print($0)
})
.disposed(by: disposeBag)

firstSubject.onNext("1")
firstSubject.onNext("2")
secondSubject.onNext("3")
firstSubject.onNext("4")
/// 输出结果:4,3

项目实操

登录界面:一个手机号码,一个短信验证码,一个登录按钮
点击登录按钮,获取输入的手机号码与短信验证码

let telObservable = telInput.rx.text.orEmpty.asDriver()
let codeObservable = codeInput.rx.text.orEmpty.asDriver()
let tapObservable = loginBtn.rx.tap.asDriver()

/// 第一步:将手机号与短信组合成一个Observable
let userNameAndCode = Driver<(String,String)>.combineLatest(telObservable, codeObservable) {
    return ($0,$1)
}

/// 当tapObservable发出事件时,就获取最新的手机号tel、验证码code,
/// 组合成一个新的Observable
tapObservable.withLatestFrom(userNameAndCode)
    .drive(onNext:{ (tel,code) in
        print(tel,code)
    })
    .disposed(by: disposebag)

相关文章

  • RxSwift_操作符_withLatestFrom

    withLatestFrom 操作符将两个 Observables 中最新的元素通过一个函数组合起来,然后将这个组...

  • RXSwift_操作符

    Subject创建订阅Source PublishSubject 最普通的subject,对它订阅的订阅者只会收到...

  • RxSwift_操作符_using

    using的作用,官方注释:构造一个依赖于资源对象的可观察序列,资源对象的生命周期与产生的可观察序列的生命周期绑定...

  • withLatestFrom

    这个操作符是一种 AND 操作符,就是将2个流合并成一个流,根据其作用实际上可以称之为 mapWithLatest...

  • RxSwift_操作符_share(replay:scope:)

    share(replay:scope:) 作用:解决有多个订阅者的情况下,避免事件转换操作符(比如:map、fla...

  • RxSwift_操作符_map、flatmap、flatMapL

    map操作符将源Observable的每个元素,通过提供的方法转换,然后返回含有转换后元素的Observable ...

  • RxJs 操作符 withLatestFrom 在 SAP 电商

    看下面这段代码: 调用 withLatestFrom 的 Observable 对象,起到主导数据产生给下游观察者...

  • withLatestFrom 运算

  • RxSwift_核心原理

    基本流程 创建序列 订阅序列 发送信号 带着问题去思考底层的实现 涉及到的几个主要的类的继承关系 流程分析 源码分...

  • Rxjava2-二、操作符

    Rxjava记录总结操作符:创建操作符、转换操作符、合并操作符、过滤操作符、其他操作符、条件操作符. 创建操作符 ...

网友评论

      本文标题:RxSwift_操作符_withLatestFrom

      本文链接:https://www.haomeiwen.com/subject/zuqwqltx.html