RxSwift (7) 手动启动序列[连接性序列]

publish

转化连接序列,订阅时不会发出信号,执行connect方法时,才开始发射信号

func rx_Publish() {

    let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
        .publish()

    _ = intSequence
        .subscribe(onNext: { print("Subscription 1:, Event: \($0)") })

    delay(2) { _ = intSequence.connect() }

    delay(4) {
        _ = intSequence
            .subscribe(onNext: { print("Subscription 2:, Event: \($0)") })
    }

    delay(6) {
        _ = intSequence
            .subscribe(onNext: { print("Subscription 3:, Event: \($0)") })
    }
}
动态结果,复制去执行以下才能看到

replay

replay()相对于publish增加了bufferSize指定对元素的缓存大小,这样新加入的订阅者可以获取相应个数的已发送的元素

func rx_replay() {
let stopObservable = PublishSubject<Int>()
    let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance).takeUntil(stopObservable)
        .replay(5)


    _ = intSequence
        .subscribe(onNext: { print("Subscription 1:, Event: \($0)") })

    delay(2) { _ = intSequence.connect() }

    delay(4) {
        _ = intSequence
            .subscribe(onNext: { print("Subscription 2:, Event: \($0)") })
    }

    delay(8) {
        _ = intSequence
            .subscribe(onNext: { print("Subscription 3:, Event: \($0)") })
    }
}
打印结果
Subscription 1:, Event: 0

Subscription 2:, Event: 0

Subscription 1:, Event: 1

Subscription 2:, Event: 1

Subscription 1:, Event: 2

Subscription 2:, Event: 2

Subscription 1:, Event: 3

Subscription 2:, Event: 3

Subscription 1:, Event: 4

Subscription 2:, Event: 4

Subscription 3:, Event: 0//这里开始回放

Subscription 3:, Event: 1

Subscription 3:, Event: 2

Subscription 3:, Event: 3

Subscription 3:, Event: 4//回放结束

Subscription 1:, Event: 5

Subscription 2:, Event: 5

Subscription 3:, Event: 5

multicast

multicast()需要传入一个subject,通过subject来管理向订阅者发送消

let subject = PublishSubject<Int>()

_ = subject
    .subscribeNext { print("Subject: \($0)") }

let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
    .multicast(subject)

_ = intSequence
    .subscribeNext { print("\tSubscription 1:, Event: \($0)") }

delay(2) { intSequence.connect() }

delay(4) {
     _ = intSequence
        .subscribeNext { print("\tSubscription 2:, Event: \($0)") }
}

delay(6) {
     _ = intSequence
        .subscribeNext { print("\tSubscription 3:, Event: \($0)") }
}
打印结果
Subject: 0

Subscription 1:, Event: 0

Subject: 1

Subscription 1:, Event: 1

Subscription 2:, Event: 1

Subject: 2

Subscription 1:, Event: 2

Subscription 2:, Event: 2

Subject: 3

Subscription 1:, Event: 3

Subscription 2:, Event: 3

Subscription 3:, Event: 3

Subject: 4

Subscription 1:, Event: 4

Subscription 2:, Event: 4

Subscription 3:, Event: 4

Subject: 5

Subscription 1:, Event: 5

Subscription 2:, Event: 5

Subscription 3:, Event: 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值