RxSwift笔记 - Combining Observables

57 篇文章 1 订阅
23 篇文章 0 订阅
本文详细介绍了 RxSwift 中的几种关键运算符:CombineLatest、Merge、StartWith、SwitchLatest 和 Zip。这些运算符用于处理多个 Observable 数据流,包括合并、切换、组合等操作,是实现响应式编程的重要工具。
摘要由CSDN通过智能技术生成


CombineLatest

当两个Observables中的任何一个发射了数据时,使用一个函数结合每个Observable发射的最近数据项,并且基于这个函数的结果发射数据。

combineLatest.png

let first = PublishSubject<String>()
let second = PublishSubject<String>()

Observable.combineLatest(first, second) { $0 + $1 }
    .subscribe(onNext: {
    print($0)
}).disposed(by: disposeBag)

first.onNext("1")
second.onNext("A")
second.onNext("B")
first.onNext("2")
second.onNext("C")
second.onNext("D")
second.onNext("E")
first.onNext("3")
first.onNext("4")

/*
 1A
 1B
 2B
 2C
 2D
 2E
 3E
 4E
 */

Merge

将多个 Observables 合并成一个

merge.png

let intSubject = PublishSubject<String>()
let strSubject = PublishSubject<String>()

Observable.of(intSubject,  strSubject)
    .merge()
    .subscribe(onNext: {
    print($0)
}).disposed(by: disposeBag)


intSubject.onNext("1")
strSubject.onNext("A")
strSubject.onNext("B")
intSubject.onNext("2")
strSubject.onNext("C")
strSubject.onNext("D")
strSubject.onNext("E")
intSubject.onNext("3")
intSubject.onNext("4")

/*
 1
 A
 B
 2
 C
 D
 E
 3
 4
 */

StartWith

将一些元素插入到序列的头部

startWith.png

let disposeBag = DisposeBag()

Observable.of("1", "2", "3")
    .startWith("A")
    .startWith("B")
    .startWith("C", "D", "E")
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

/*
1
2
3
A
B
C
D
E
*/ 

SwitchLatest

将一个发射多个Observables的Observable转换成另一个单独的Observable,后者发射那些Observables最近发射的数据项

switch.c.png

let disposeBag = DisposeBag()

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

let variable = Variable(subject1)

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

subject1.onNext("B")
subject1.onNext("C")

//改变事件源
variable.value = subject2
subject1.onNext("D")
subject2.onNext("2")

//改变事件源
variable.value = subject1
subject2.onNext("3")
subject1.onNext("E")

/*
A
B
C
1
2
3
E
*/

Zip

通过一个函数将多个 Observables 的元素组合起来,然后将每一个组合的结果发出来

是由每一个源 Observables 的第一个元素组合出来的。它的第二个元素 ,是由每一个源 Observables 的第二个元素组合出来的。它的第三个元素 ,是由每一个源 Observables 的第三个元素组合出来的,以此类推。它的元素数量等于源 Observables 中元素数量最少的那个。

zip.png

let disposeBag = DisposeBag()
let first = PublishSubject<String>()
let second = PublishSubject<String>()

Observable.zip(first, second) { $0 + $1 }
          .subscribe(onNext: { print($0) })
          .disposed(by: disposeBag)

first.onNext("1")
second.onNext("A")
first.onNext("2")
second.onNext("B")
second.onNext("C")
second.onNext("D")
first.onNext("3")
first.onNext("4")

/*
1A
2B
3C
4D
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值