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