1:PublishSubject
必须要在订阅之后,才能收到消息,这个消息也必须是在订阅之后发送的。之前发送的不响应。
let publishSubject = PublishSubject<Int>.init()
publishSubject.onNext(0)
publishSubject.subscribe(onNext:{
print("谁来了\($0)")}).disposed(by: disposeBag)
publishSubject.onNext(1)
publishSubject.onNext(2)
输出
谁来了1
谁来了2
2: BehaviorSubject
会为订阅者发送订阅前接收到的最后一个元素。
let publishSubject = BehaviorSubject(value: 1)
publishSubject.onNext(0)
publishSubject.onNext(1)
publishSubject.subscribe(onNext:{
print("谁来了\($0)")}).disposed(by: disposeBag)
publishSubject.onNext(2)
publishSubject.onNext(3)
打印结果
谁来了1
谁来了2
谁来了3
3:ReplaySubject
通过create(bufferSize: Int) 决定发送消息之前的订阅响应几个。
let publishSubject = ReplaySubject<Int>.create(bufferSize: 3)
publishSubject.onNext(0)
publishSubject.onNext(1)
publishSubject.onNext(2)
publishSubject.onNext(3)
publishSubject.subscribe(onNext:{
print("谁来了\($0)")}).disposed(by: disposeBag)
publishSubject.onNext(4)
publishSubject.onNext(5)
输出结果
谁来了1
谁来了2
谁来了3
谁来了4
谁来了5
4:AsyncSubject
必须调用* publishSubject.onCompleted()
- 只响应最后一个事件。
let publishSubject = AsyncSubject<Int>()
publishSubject.onNext(0)
publishSubject.onNext(1)
publishSubject.onNext(2)
publishSubject.onNext(3)
publishSubject.subscribe(onNext:{
print("谁来了\($0)")}).disposed(by: disposeBag)
publishSubject.onNext(4)
publishSubject.onNext(5)
publishSubject.onCompleted()
谁来了5
5:BehaviorRelay
当观察者订阅BehaviorSubject时,它开始发射原始Observable最近发射的数据(如果此时还没有收到任何数据,它会发射一个默认值),然后继续发射其它任何来自原始Observable的数据。
let publishSubject = BehaviorSubject(value: 1)
publishSubject.onNext(0)
publishSubject.onNext(1)
publishSubject.subscribe({
print("第一次订阅\($0)")
}).disposed(by: disposeBag)
publishSubject.onNext(2)
publishSubject.onNext(3)
publishSubject.subscribe({
print("第二次订阅\($0)")
}).disposed(by: disposeBag)
publishSubject.onNext(4)
publishSubject.onNext(5)
publishSubject.subscribe({
print("第三次订阅\($0)")
}).disposed(by: disposeBag)
publishSubject.onNext(6)
publishSubject.onNext(7)
输出结果
第一次订阅next(1)
第一次订阅next(2)
第一次订阅next(3)
第二次订阅next(3)
第一次订阅next(4)
第二次订阅next(4)
第一次订阅next(5)
第二次订阅next(5)
第三次订阅next(5)
第一次订阅next(6)
第二次订阅next(6)
第三次订阅next(6)
第一次订阅next(7)
第二次订阅next(7)
第三次订阅next(7)
网友评论