RxSwift:BehaviorSubject和BehaviorRelay之间的用法区别是什么?

RxSwift:BehaviorSubject和BehaviorRelay之间的用法区别是什么?,swift,rx-swift,behaviorsubject,behaviorrelay,Swift,Rx Swift,Behaviorsubject,Behaviorrelay,我知道BehaviorRelay正在替换变量,而BehaviorSubject和BehaviorRelay都以初始值开始,并将其或最新值重播给订阅者 那么有什么区别呢?在这种情况下,您将使用其中一个而不是另一个?如for行为规则中所述: BehaviorRelay是BehaviorSubject的包装器 与BehaviorSubject不同,它不能以错误或完成结束 然后,您将使用BehaviorSubject对可能以和错误终止的流进行建模,而BehaviorRelay将向api用户保证不会产生错

我知道
BehaviorRelay
正在替换
变量
,而
BehaviorSubject
BehaviorRelay
都以初始值开始,并将其或最新值重播给订阅者

那么有什么区别呢?在这种情况下,您将使用其中一个而不是另一个?

如for
行为规则中所述:

BehaviorRelay是
BehaviorSubject
的包装器

BehaviorSubject
不同,它不能以错误或完成结束


然后,您将使用
BehaviorSubject
对可能以和错误终止的流进行建模,而
BehaviorRelay
将向api用户保证不会产生错误。

BehaviorSubject需要使用默认初始值创建 当订阅者来订阅它时,订阅者将立即收到BehaviorSubjects发出的最后一个事件。之后,与正常情况一样,它还将接收Behavior Subject之后发布的新事件

//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显示为变量的替换项。它的本质实际上是对BehaviorSubject的封装,因此它也必须由默认初始值创建 BehaviorRelay具有BehaviorSubject功能,它可以将最后一个事件和新创建的事件发送给订阅服务器 与BehaviorSubject不同,BehaviorRelay将在销毁.complete事件时自动发送该事件,您无法手动将已完成或错误事件完全发送到BehaviorReply以结束该事件。 BehaviorRelay有一个value属性,通过它我们可以获得最新的值。可以通过其accept()方法修改该值

//创建初始值为111的BehaviorRelay
让主题=行为相关性(值:“111”)
//修改值
主体。接受(“222”)
//第一次订阅
subject.asObservable().subscribe{
打印(“第一次订阅:,$0)
}.处置(由:处置人)
//修改值
主体。接受(“333”)
如果要将新值合并到原始值,可以将accept()方法与value属性结合使用。(这通常以上拉加载函数的形式使用,BehaviorRelay用于保存所有加载的数据)

可能会有所帮助。这应该是“然后使用BehaviorSubject对可能终止的流进行建模。(句号)”。主体可以终止,中继永远不会终止。
//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")