我知道BehaviorRelay
正在替换,并且Variable
两者都以初始值开头,并将其或最新值重播给订阅者。BehaviorSubject
BehaviorRelay
那有什么区别呢?在这种情况下,您会使用其中一种?
我知道BehaviorRelay
正在替换,并且Variable
两者都以初始值开头,并将其或最新值重播给订阅者。BehaviorSubject
BehaviorRelay
那有什么区别呢?在这种情况下,您会使用其中一种?
如源文件中所述BehaviorRelay
:
BehaviorRelay 是
BehaviorSubject
.不像
BehaviorSubject
它不能因错误或完成而终止。
然后,您将使用BehaviorSubject
对可能因错误而终止的流进行建模,同时BehaviorRelay
向您的 api 用户保证不会出现错误。
BehaviorSubject 需要创建一个默认初始值 当订阅者来订阅它时,订阅者将立即收到 BehaviorSubjects 发出的最后一个事件。之后,和正常情况一样,它也会收到 BehaviorSubject 之后发出的新事件
//Create a BehaviorSubject
let subject = BehaviorSubject(value: "111")
//Subscribe for the first time subject
subject.subscribe {event in
print("The first subscription:", event)
}.disposed(by: disposeBag)
BehaviorRelay 显示为 Variable 的替代品。它的本质实际上是对 BehaviorSubject 的封装,所以它也必须由一个默认的初始值来创建 BehaviorRelay 具有 BehaviorSubject 的功能,可以将最后一个事件和新创建的事件发送给它的订阅者 与 BehaviorSubject 不同的是,BehaviorRelay 会自动发送一个 .当它被销毁时完成事件,您不能手动将完成或错误事件发送到 BehaviorReply 以结束它。BehaviorRelay 有一个 value 属性,通过它我们可以得到最新的值。可以通过其accept()方法修改该值
//Create a BehaviorRelay with an initial value of 111
let subject = BehaviorRelay<String>(value: "111")
//Modify value
subject.accept("222")
//The first subscription
subject.asObservable().subscribe {
print("1st subscription:", $0)
}.disposed(by: disposeBag)
//Modify value
subject.accept("333")
如果要将新值合并到原始值,可以结合 value 属性使用 accept() 方法。(这个常用上拉加载函数的形式,BehaviorRelay用来保存所有加载的数据)