上一篇文章,我们讲解了Subject的第二种机制。
BehaviorSubject
除了给订阅者发送上一条消息之外。
我们还能给订阅者发送之前消息的范围。
也就是本章讲解的主角。
ReplaySubject
它跟BehaviorSubject一样也会给订阅者发送历史消息,区别在于。
1.ReplaySubject没有默认消息,订阅空的ReplaySubject不会收到任何消息,而空的BehaviorSubject会获得value默认内容。
2.ReplaySubject自带一个缓冲区,当有订阅者订阅的时候,它会向订阅者发送缓冲区内的所有消息。
有了前面的两次理解后,想必这个也难不倒你们。
废话不多说,直接来创建一个吧。
let subject =ReplaySubject<String>.create(bufferSize:2)
依旧用的是泛型string类型。
这里注意下,ReplaySubject的创建中,必须得要设置下create(bufferSize:2)缓冲区。
接着我们快速的用
let sub1 = subject.subscribe(
onNext: {print("sub1 - \($0)")}
)
来接受他的消息。
subject.onNext("111")
subject.onNext("222")
subject.onNext("333")
sub1.dispose()
顺序输入进去,和之前一样,sub1自然会依次打印123.
这时我们添加第二订阅者sub2
let sub2 = subject.subscribe(
onNext: {print("sub2 - \($0)")}
)
sub2.dispose()
依次输入并且打印,你们猜会发生什么情况?
答案嘛,自然是这样滴!
sub1 - 111
sub1 - 222
sub1 - 333
sub2 - 222
sub2 - 333
不知道是不是和各位想的一样?
但其实在前面两个机制的理解下,这个机制应该十分好懂吧?
正所谓换汤不换药,轻轻松松~
不过好像这三种就已经包含全部的Subject用法了,难道还有机制吗?
我会告诉你,还有的。
那么下章见咯~
下一章传送门:rxSwift从零开始的代码7 - 简书
网友评论