初识RxSwift
初识Observable
Observable<T>
这个类就是Rx框架的基础, 我们可以称他为可观察序列, 他的作用就是可以异步的产生一系列的Event
(事件), 即一个Observable<T>
对象会随着时间的推移不定期的发出event(element: T)
这样一个东西- 这些
Event
还可以鞋带数据, 它的泛型<T>就是用来指定这个Event
携带的数据的类型 - 有了
Observable<T>
(可观察序列), 我们还需要一个Observer
(订阅者)来订阅它, 这样这个订阅者才能收到Observable<T>
不时发出的Event
关于Event
Observable
可以发出3种不同类型的Event
事件
- next: 可以携带数据<T>的事件, 可以说是他是一个"最正常"的事件
- error: 表示一个错误, 他可以携带具体的错误内容, 一旦
Observable
发出了error event
, 则这个Observable
就等于终止了, 以后再也不会发出event
事件了 - complete: 表示
Observable
发出的事件正常的结束了, 跟error
一样, 一旦OBservable
发出了complete event
, 则这个Observable
就等于终止了, 以后再也不会发出event
事件了
创建OBservable
of()方法
- 该方法可以接受可变数量的参数(必须是同类型的)
let observable = Observable.of("A", "B", "c")
from()方法
- 该方法需要一个数组参数
let observable = Observable.from(["A", "B", "C"])
初识Subjects
Subjects既是
Observer
, 也是Observable
- 说他是
Observer
, 是因为它能够动态的接受新的值 - 说他又是一个
Observable
, 是因为当Subjects
有了新的值之后, 就会通过Event
将新值发出给他的所有订阅者 - 一共有4种
Subjects
, 分别为:PublishSubject
,BehaviorSubject
,ReplySubject
,Variable
- 他们之间最大的区别只是在于, 当一个新的订阅者刚订阅他的时候, 能不能收到
Subject
以前发出过的旧的Event
, 如果能的话又能收到多少个
PublishSubject
PublishSubject
是最普通的Subject
, 它不需要初始值就能创建PublishSubject
的订阅者从他们开始订阅的时间点起, 可以收到订阅后Subject
发出的新Event
, 而不会收到他们在订阅前已发出的Event
BehaviorSubject
BehaviorSubject
需要通过一个默认初始值来创建- 当一个订阅者来订阅他的时候, 这个订阅者会立即收到
BehaviorSubject
上一个发出的event
, 之后就跟正常的情况一样, 他也会接收到BehaviorSubject
之后发出的新的event
ReplaySubject
ReplaySubject
在创建时候需要设置一个bufferSize
, 表示它对于它发送过的event
的缓存的个数- 比如一个
BehaviorSubject
的bufferSize
设置为2, 他发出了3个.next
的event
, 那么他会将后两个(最近的两个)event
给缓存起来, 此时如果有一个subscriber
订阅了这个ReplaySubject
,那么这个subscriber
就会立即收到前面缓存的两个.next
的event
外, 还会收到那个终结的.error
或者.complete
的event
Variable(将要被弃用))
Variable
其实就是对BehaviorSubject
的封装, 所以他也必须要通过一个默认的初始值进行创建Variable
具有BehaviorSubject
的功能, 能够向他的订阅者发出上一个event
以及之后新创建的event
- 不同的是,
Variable
还会把之前发出的值保存为自己的状态, 同事他会在销毁时自动发送.complete
的event
, 不需要也不能手动给Variable
发送complete
或者error
事件来结束他 - 简单地说就是
Variable
有个一value
属性, 我们改变这个value
属性的值就相当于调用一般Subjects
的onNext()
方法, 而这个最新的onNext()
的值就被保存在value
属性里了, 知道我们再次修改他
注意:
Variable
本身没有subscribe()
方法, 但是所有Subjects
都有一个asObservable()
方法, 我们可以使用这个方法返回这个Variable
的Observable
类型, 拿到这个Observable
类型我们就能订阅他了
Variable
绝对不会发生error
事件, 强制调用onError()
会导致编译错误
给Variable
赋值, 会自动触发onNext()
事件, 然后自动执行onComplete()
事件. 强制绑定onComplete()
事件也会导致编译错误
初识RxSwift的更多相关文章
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
- Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
随机推荐
- 【使用DIV+CSS重写网站首页案例】CSS选择器
使用表格<table></table>对网站首页进行布局有缺陷,不能拖动版块,不灵活. DIV Div是一个html的标签,单独使用没有意义,必须结合CSS使用: 是一个块级元 ...
- 团队——Beta版本发布
目录 最棒团队成员信息 一.7次冲刺博客链接 二.解决的Alpha版本问题 / Beta计划任务(与Alpha版本不同点) 二.项目本次α版本的发布地址.下载安装说明 四.PM最终报告(详细报告在各冲 ...
- php72w-common conflicts with php-common-5.4.16-46.el7.x86_64
安装PHP的BC扩展时,报的错. 使用的命令为 yum install php-bcmath 输出错误: --> Processing Conflict: php72w-common--.w7. ...
- 洛谷P4556 雨天的尾巴(线段树合并)
洛谷P4556 雨天的尾巴 题目链接 题解: 因为一个点可能存放多种物品,直接开二维数组进行统计时间.空间复杂度都不能承受.因为每一个点所拥有的物品只与其子树中的点有关,所以可以考虑对每一个点来建立一 ...
- httprunner学习11-辅助函数debugtalk.py
前言 在httprunner里面,每个 YAML / JSON 文件的脚本都是独立运行的,有时候我们希望能跨文件使用公用的参数. 比如登录生成一个token,后面的用例都可以去引用这个token值,或 ...
- ffmpeg的源码调试
转自:windows下使用Visual Studio编译可以调试的FFmpeg 2017年01月05日 13:33:39 阅读数:3654 因本人主要在windows环境下开发,Linux下的gpb调 ...
- Ofbiz项目学习——阶段性小结——插入数据
一.通用插入操作 /** * * 编写一个服务createUomOneDemo, * 该服务的作用是在表Uom中增加一条记录,其中: * 字段uomId的值为“BaseLineProduct”. * ...
- 【每天学一点Linux】快速清除文件内容
linux几种快速清空文件内容的方法 几种快速清空文件内容的方法: $ : > filename #其中的 : 是一个占位符, 不产生任何输出. $ > filename $ echo “ ...
- springcloud_Hystrix(熔断器)
为什么需要 Hystrix? 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC).为了保证其高可用,单个服务又必须集群部署.由于网络原因或者自身的原因,服务并不能保证服 ...
- Linux安全加固(二)禁止普通用户su到root/设置SSH终端接入白名单/修改history条数
一.禁止普通用户su到root管理员.设置可以su到root的白名单 1.首先看一下正常情况 2.可以看到普通用户使用su root命令,输入密码即可登录到root用户 3.下面开始配置禁止所有普通用 ...