美文网首页
RxSwift中的组合操作

RxSwift中的组合操作

作者: AKyS佐毅 | 来源:发表于2017-07-25 14:15 被阅读0次

今天谈一下RxSwift中的组合操作,和RAC一样。可以参照RAC理解。

Combination Operators在RxSwift中的实现有五种:

  • startWith
  • merge
  • zip
  • combineLatest
  • switchLatest

StartWith

在Observable释放元素之前,发射指定的元素序列


StartWith.png
 let disposeBag = DisposeBag()
        Observable.of(["1","2","3"]).startWith(["0"]).subscribe({ (event) in
            print(event)
        }).disposed(by: disposeBag)

执行结果如下:

next(["0"])
next(["1", "2", "3"])
completed

Merge

将多个Observable组合成单个Observable,并且按照时间顺序发射对应事件

Merge.png
       let disposeBag = DisposeBag()
        
        let subject1 = PublishSubject<String>()
        let subject2 = PublishSubject<String>()
        
        Observable.of(subject1, subject2)
            .merge()
            .subscribe(onNext: { print($0) })
            .disposed(by: disposeBag)
        
        subject1.onNext("")
        subject1.onNext("")
        subject2.onNext("")
        subject2.onNext("🦊")
        subject1.onNext("")
        subject2.onNext("🦁️")



🦊

🦁️

zip

将多个Observable(注意:必须是要成对)组合成单个Observable,当有事件到达时,会在每个序列中对应的索引上对应的元素发出。

zip.png
   let disposeBag = DisposeBag()
    
    let subject1 = PublishSubject<String>()
    let subject2 = PublishSubject<String>()
    
    Observable.zip(subject1, subject2) { string1,string2 in
        "\(string1)--\(string2)"
        }.subscribe(onNext: {print($0)}).disposed(by: disposeBag)
    
    subject1.onNext("A")
    subject1.onNext("B")
    subject1.onNext("C")
    
    subject2.onNext("1")
    subject2.onNext("2")
A--1
B--2

combineLatest

combineLatest.png

当一个项目由两个Observables发射时,通过一个指定的功能将每个Observable观察到的最新项目组合起来,并根据该功能的结果

let disposeBag = DisposeBag()
let subject1 = PublishSubject<String>()
let subject2 = PublishSubject<String>()

Observable.combineLatest(subject1, subject2) { string1,string2 in
        "\(string1)--\(string2)"
  }.subscribe(onNext: {print($0)}).disposed(by: disposeBag)
    
subject1.onNext("A")
subject2.onNext("1")
subject2.onNext("2")
subject1.onNext("B")
subject1.onNext("C")

执行结果:

A--1
A--2
B--2
C--2

switchLatest

切换Observable队列

let disposeBag = DisposeBag()

let subject1 = BehaviorSubject(value: "1")
let subject2 = BehaviorSubject(value: "A")

let variable = Variable(subject1)

variable.asObservable()
    .switchLatest()
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

subject1.onNext("2")
subject1.onNext("3")

variable.value = subject2

subject1.onNext("4")
subject2.onNext("B")

执行结果:

1
2
3
A
B

相关文章

  • RxSwift中的组合操作

    今天谈一下RxSwift中的组合操作,和RAC一样。可以参照RAC理解。 Combination Operator...

  • 谈谈RxSwift中的错误处理

    RxSwift中提供了多种不同的错误处理操作符,它们可以在链式操作中相互组合以实现复杂的处理逻辑,下面先简单介绍一...

  • RxSwift, 异步操作组合处理

    响应式编程&链式编程 公司的几个共享项目, 有较多后台定时的网络请求,定位和蓝牙操作的组合.原实现方案是直接把不同...

  • RxSwift学习--高阶函数 / 操作符(上)

    前言 在RxSwift中,高阶函数也可以成为操作符,高阶函数可以帮助我们创建新的序列,或者变化组合原有的序列,从而...

  • SwiftUI(Combine)学习整理(三)

    如果有RxSwift的学习经验那么理解combine会更加迅速 通过对事件处理的操作进行组合 (combine) ...

  • RxSwift(五)操作符的使用

    在RxSwift中,有许多实用的操作符,也可以称之为高阶函数,可以帮助我们创建特定功能的序列,或者组合变换原有的序...

  • RxSwift 9 组合操作符

    前面的内容中已经学习了如何创建, 过滤, 变换 observable 的事件序列, 尤其是需要留意 flatMap...

  • RxSwift-搞事情(一)

    一、初步了解 RxSwift的实现概括为4个流程,在RxSwift中,所有异步操作(事件)和数据流均被抽象为可观察...

  • RxSwift基础讲解

    RxSwift:RxSwift是一个使用可观察序列和函数式操作符编写异步和基于事件的代码的库。RxSwift常用的...

  • RxSwift快速指南(三)

    Filter Filter的操作即为过滤,是将Observable队列中不需要的Element去掉,RxSwift...

网友评论

      本文标题:RxSwift中的组合操作

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