初识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的缓存的个数
  • 比如一个BehaviorSubjectbufferSize设置为2, 他发出了3个.nextevent, 那么他会将后两个(最近的两个)event给缓存起来, 此时如果有一个subscriber订阅了这个ReplaySubject,那么这个subscriber就会立即收到前面缓存的两个.nextevent外, 还会收到那个终结的.error或者.completeevent

Variable(将要被弃用))

  • Variable其实就是对BehaviorSubject的封装, 所以他也必须要通过一个默认的初始值进行创建
  • Variable具有BehaviorSubject的功能, 能够向他的订阅者发出上一个event以及之后新创建的event
  • 不同的是, Variable还会把之前发出的值保存为自己的状态, 同事他会在销毁时自动发送.completeevent, 不需要也不能手动给Variable发送complete或者error事件来结束他
  • 简单地说就是Variable有个一value属性, 我们改变这个value属性的值就相当于调用一般SubjectsonNext()方法, 而这个最新的onNext()的值就被保存在value属性里了, 知道我们再次修改他

注意:

Variable本身没有subscribe()方法, 但是所有Subjects都有一个asObservable()方法, 我们可以使用这个方法返回这个VariableObservable类型, 拿到这个Observable类型我们就能订阅他了

Variable绝对不会发生error事件, 强制调用onError()会导致编译错误

Variable赋值, 会自动触发onNext()事件, 然后自动执行onComplete()事件. 强制绑定onComplete()事件也会导致编译错误

初识RxSwift的更多相关文章

  1. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  2. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  3. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  4. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

  5. UI篇(初识君面)

    我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...

  6. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  7. 初识SpringMvc

    初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...

  8. 初识redis数据类型

    初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...

  9. Redis初识、设计思想与一些学习资源推荐

    一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...

随机推荐

  1. fastjson =< 1.2.47 反序列化漏洞复现

    fastjson =< 1.2.47 反序列化漏洞复现 HW期间爆出来一个在hw期间使用的fastjson 漏洞,该漏洞无需开启autoType即可利用成功,建议使用fastjson的用户尽快升 ...

  2. SparkStreaming运行原理

    Spark Streaming应用也是Spark应用,Spark Streaming生成的DStream最终也是会转化成RDD,然后进行RDD的计算,所以Spark Streaming最终的计算是RD ...

  3. PureComponent & shouldComponentUpdate

    Called to determine whether the change in props and state should trigger a re-render. Component alwa ...

  4. windows10家庭版升级专业版/企业版

    以防万一,还是把Windows10家庭版的密钥保存下来. 一.保留原密钥 1. Win+R,输入regedit 2. 进入目录 HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...

  5. Codeforces Round #552 (Div. 3)-D-Walking Robot-(贪心)

    http://codeforces.com/contest/1154/problem/D 解题: 1.无光的时候优先使用太阳能电池. 2.有光的时候 (1)太阳能电池没满电,让它充,使用普通电池 (2 ...

  6. (3)使用Android手机作为树莓派的屏幕

    https://jingyan.baidu.com/album/676629977483b154d51b848e.html

  7. Edraw Max 9.4 Crack Method

    使用010editor修改以下两个文件. BaseCore.dll (修改二进制内容hex) Before C6 45 C8 62 C6 45 C9 64 C6 45 CA 65 C6 45 CB 6 ...

  8. GitHub上如何创建文件夹

    看了网上很多关于如何在git上创建空文件夹的文章后,发现大家写的都是用指令在本地创建一个空文件夹后再上传指令和步骤都太繁琐且复杂了,对于用git不是很熟练得到人来说太麻烦了,而且在本地于github上 ...

  9. LOJ#6229. 这是一道简单的数学题(莫比乌斯反演+杜教筛)

    题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^i\frac{lcm(i,j)}{gcd(i,j)}\] 答案对\(10^9+7\)取模. \(n< ...

  10. Fiborial 题解——2019.10.14

    一看到这个题 就感觉...cao,, 什么东西...??! 然后就开始暴力求Fn 然鹅我并不会写高精(我太菜了) 只能求到大概10左右 在吧Fn给质因数分解 求出其因子个数 妄图找到什么有关的规律 但 ...