【问题标题】:What are the differences between observable and subject in rxSwiftrxSwift 中的 observable 和 subject 有什么区别
【发布时间】:2017-07-17 09:57:23
【问题描述】:

observable 和 subject 之间有什么区别。 当我定义一个可观察的类型变量时。它可以发出 onNext、onComplete、onDispose。然而,主题也可以这样做。什么时候应该使用 observable,什么情况下应该使用 subject?

【问题讨论】:

    标签: ios swift rx-swift


    【解决方案1】:

    为了理解它们之间的区别,我们应该提一下Observable是:

    在 ReactiveX 中,观察者订阅了 Observable。然后 观察者对 Observable 的任何项目或项目序列做出反应 发出。这种模式有利于并发操作,因为它确实 等待 Observable 发射对象时不需要阻塞, 但相反,它以观察者的形式创建了一个哨兵 准备好在 Observable 未来的任何时间做出适当的反应 这样做。

    换句话说,observable 是数据生产者(负责发布要观察的通知)。

    实际上,Subject 是一种特殊类型的 Observables(您仍然可以像订阅任何其他 observable 一样订阅消息):

    Subject 是一种桥接器或代理,在某些情况下可用 ReactiveX 的实现既作为观察者又作为 可观察。因为是观察者,所以可以订阅一个或多个 Observables,并且因为它是一个 Observable,它可以通过 它通过重新发射它们观察到的项目,它也可以发射新项目。

    但事情是主题是可观察者和观察者的表示 - 如文档中所述 - 这意味着主题可能是数据生产者(负责发布要观察的通知或数据消费者(负责接收通知)。

    另外:要检查主题的类型,您可能需要检查:RxSwift Subject Types

    【讨论】:

    • Swift Pearls 链接已损坏。似乎该 URL 已被接管,并可能指向网络钓鱼网站。
    【解决方案2】:

    我认为,根据我对这两个主题的了解,我可以这么说,

    可观察的

    • Observable(Rx 的基本部分)是具有一些特殊功能的序列。最重要的特点是异步。 Observables 产生一些事件(即 onNext、onError、onCompleted),称为发射。事件包含一些值(即 Int、Bool、Array 或自定义类型)。

    主题

    • 简单的 observable 只能发出可以订阅的事件。但是如果我们想在当前的 observable(也称为 self observer)上添加一些值怎么办。所以我可以简单地说,作为observableobserver的东西叫做subjects。

    【讨论】:

      【解决方案3】:

      您得到了一些解释 Observables 和 Subjects 之间区别的答案,但没有人涵盖您的第二个问题...

      什么时候应该使用 observable,什么情况下应该使用 subject?

      以下是对该问题的一个很好的但复杂的答案: http://davesexton.com/blog/post/To-Use-Subject-Or-Not-To-Use-Subject.aspx

      TL;DR 就是这样。尽可能使用 Observable,必要时使用 Subject。

      当你需要一个热的 observable 并且还没有一个 observable 可以使用时,你可以使用 Subject。例如,RxCocoa 广泛使用 Subjects 来为您创建与特定 UI 元素相关联的 observables。它们主要用于将非 Rx 代码桥接到 Rx 代码,并将生产者连接到消费者,由于某种原因必须首先创建后者。

      【讨论】:

        猜你喜欢
        • 2018-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-11
        • 2016-09-18
        • 2016-07-04
        • 1970-01-01
        • 2016-12-03
        相关资源
        最近更新 更多