前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >函数响应式编程框架RxSwift 学习——Subject

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

作者头像
100000798482
发布2018-08-20 17:04:36
6690
发布2018-08-20 17:04:36
举报
文章被收录于专栏:一个番茄说一个番茄说

上一篇写了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变化的同时开始自动请求数据。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015.09.30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PublishSubject
  • ReplaySubject
  • BehaviorSubject
  • Variable
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档