观察与主题之间有什么区别? 当我定义一个可观察的类型变量时。它可以发出onNext,onComplete,onDispose。但是主题也可以这样做。我什么时候应该使用observable,在什么情况下我应该使用subject?
答案 0 :(得分:10)
为了理解它们之间的区别,我们应该提到 Observable 是:
在ReactiveX中,观察者订阅了一个Observable。然后 观察者对Observable的任何项目或项目序列作出反应 发射。此模式有助于并发操作,因为它确实如此 在等待Observable发出对象时不需要阻塞, 但相反,它以观察者的形式创造了一个哨兵 随时准备对Observable进行适当的反应 这样做。
换句话说,observable是数据生成器(负责发布要观察的通知)。
实际上, Subject 是一种特殊类型的Observable(您仍然可以订阅任何其他可观察的消息):
主题是某种可用的桥梁或代理 ReactiveX 的实现,既充当观察者又充当 的可观察即可。因为它是观察者,所以它可以订阅一个或多个 Observable,因为它是一个Observable,它可以通过 它通过重新发现它们观察的物品,它也可以发出新物品。
但是主题是一个表示 - 在文档中提到 - 可观察和观察者,这意味着主题可能是数据生成者(负责发布要观察的通知或数据使用者(负责接收通知)。
代码段:我建议检查RxSwift For Dummies Part 3以查看可观察对象和主题实用代码。
:要检查主题类型,您可能需要检查:RxSwift Subject Types。
答案 1 :(得分:3)
我认为,根据我对这两个主题的了解,我可以这样说,
<强>观测量强>
<强>受试者强>
答案 2 :(得分:2)
你有几个答案解释了Observables和Subjects之间的区别,但没有人覆盖你的第二个问题......
我什么时候应该使用observable,在什么情况下我应该使用subject?
对于这个问题,这是一个很好的,如果复杂的答案: http://davesexton.com/blog/post/To-Use-Subject-Or-Not-To-Use-Subject.aspx
TL; DR就是这个。尽可能使用Observable,必要时使用Subject。
您需要热门观察时才使用主题,并且没有可观察到的可观察对象。例如,RxCocoa广泛使用Subjects为您创建与特定UI元素绑定的observable。它们主要用于将非Rx代码桥接到Rx代码中,并将生产者连接到消费者,后者必须首先由于某种原因创建后者。