专栏首页一个番茄说函数响应式编程框架RxSwift 学习——Subject

函数响应式编程框架RxSwift 学习——Subject

上一篇写了Observable,这篇文章接着趁热打铁把Subject写了。

关于Subject的定义,在RxSwift的文档中它是这样说的

A Subject is a sort of bridge or proxy that is available in some implementations of ReactiveX that acts both as an observer and as an Observable. Because it is an observer, it can subscribe to one or more Observables, and because it is an Observable, it can pass through the items it observes by reemitting them, and it can also emit new items.

简单的比喻下,Observable像是一个水管,会源源不断的有水冒出来。Subject就像一个水龙头,它可以套在水管上,接受Observable上面的事件。但是作为水龙头,它下面还可以被别的observer给subscribe了。

在RxSwift中,主要有三类Subject:

PublishSubject

它仅仅会发送observer订阅之后的事件,也就是说如果sequence上有.Next 的到来,但是这个时候某个observer还没有subscribe它,这个observer就收不到这条信息,它只会收到它订阅之后发生的事件。

ReplaySubject

它和PublishSubject不同之处在于它不会漏消息。即使observer在subscribe的时候已经有事件发生过了,它也会收到之前的事件序列。

BehaviorSubject

当有observer在订阅一个BehaviorSubject的时候,它首先将会收到Observable上最近发送一个信号(或者是默认值),接着才会收到Observable上会发送的序列。

Variable

Variable是BehaviorSubject的封装,它和BehaviorSubject不同之处在于,不能向Variable发送.Complete.Error,它会在生命周期结束被释放的时候自动发送.Complete

在我上一篇文章中,说到了一个比较常见的一个应用场景,就是tableview滑动加载更多的数据。在这里tableview滑动事件是一个Observable的(RxCocoa提供相应支持), 我的page是一个Variable<Int>类型的属性,它可以订阅tableview上是否需要更改页码,然后page又被负责API请求的对象给订阅了,从而当page变化的同时开始自动请求数据。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于K8s的Jenkins持续集成实战(上)

    Jenkins是一款广泛受到的欢迎的持续集成工具,有着丰富的插件以及扩展能力,基本上能够满足大多数团队的需求。本文将从工具使用的角度,来讲述如何在kuberne...

    100000798482
  • 付费,就是捡便宜

    我很早以前就听到过这个观点,最近一次又在“得到”App上重温了一下这个观点。 先给出一个最终的结论:

    100000798482
  • 移动开发流水线建立以及自动化测试

    工业时代流水线的发明将生产任务的效率大大提升。同样,在软件开发过程中流水线的建立也能帮助我们更好的产出、提升效率。

    100000798482
  • Linux下使用Nginx端口转发出现502错误的一种解决办法

    今天圈里的一个朋友在配置完nfinx80端口转发到5000后,发现一个问题 问题描述: 正确配置了Nginx80端口转5000端口,在CentOS上把.Net ...

    码农阿宇
  • nmap学习笔记

    当然也支持CIDR记法,再例如,nmap 192.168.1.1/24用于扫描你家路由器上都连了些什么。

    ApacheCN_飞龙
  • 「人工智能」下的「失业焦虑」

    早上与某汽车公司的客户开会,讨论如何用机器学习优化他们的业务流程。他们常年需要在国际间进出口汽车零件,每天与各国海关打交道。进出口的流程需要在WTO的制定的框架...

    小莹莹
  • 一次Observable的empty和never方法的rx源码笔记

    我们在用 RxJava 的时候,如果需要在某个地方需要中断事件流,那么直接返回一个 Observable.empty() ,与它有类似功能的有 Observa...

    静默加载
  • 【最新成果】基于密集深度卷积神经网络的SAR图像水域分割

    近年来,合成孔径雷达(SAR)被广泛地应用于农业、水洋、军事等领域。而研究SAR图像中的水域信息对洪涝灾害的预警监测、水域管理等具有重要意义。特别是,利用水域分...

    智能算法
  • Excel公式练习73: 计算车辆停放的时长

    汽车公司会实时跟踪卡车车队的位置,在每天的每个小时点会记录每辆卡车的具体位置,如上图1所示,假设共有5个位置,分别使用A、B、C、D、E来代表,卡车在同一位置连...

    fanjy
  • 烧香的不只有和尚,还有熊猫!再谈熊猫烧香“一代毒王”李俊!

    导语:2006年到2007年,那年大家伙都是刚碰计算机,腾讯还只是一款普通的聊天工具,淘宝也只是刚刚起步,人们对电脑的依赖性还不算强,更谈不上对信息安全和电脑安...

    周俊辉

扫码关注云+社区

领取腾讯云代金券