初识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 年 ...
随机推荐
- C#实体类与XML相互转换
1.实体类与XML相互转换 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化. 把XML转换成相应的实体类,需要使用到XmlSerializer类的De ...
- Mock Server之flask_restful(python+flask)
一.结构设计 上一篇,写了Mock Server的基础实现与被测系统的对接 当我们要mock 的 api越来越多的时候,路由与相关的方法都堆在app.py中就不合适了,不可拔插,可读性也比较差,因此要 ...
- splunk dga
https://splunkbase.splunk.com/app/3559/ 详细参考: https://www.slideshare.net/Splunk/using-machine-learni ...
- 织梦DedeCms网站内部SEO详细分析
一.确定网站的目标关键词 最为重要的一方面,一般网站首页的目标关键词建议在1-3个.对于目标关键词的选取有几个建议 1.定位:网站的内容和业务相关 2.分析:对用户体验及竞争对手的网站进行分析 3.筛 ...
- spark的RDDAPI总结
下面是RDD的基础操作API介绍: 操作类型 函数名 作用 转化操作 map() 参数是函数,函数应用于RDD每一个元素,返回值是新的RDD flatMap() 参数是函数,函数应用于RDD每一个元素 ...
- 滚动加载|页面滑到底部加载数据|jquery.endless-scroll插件|使用demo
<html> <head> <link rel="dns-prefetch" href="http://i.tq121.com.cn&quo ...
- 开源项目(7)Opencv日常之Homography
参考教程 https://blog.csdn.net/liuphahaha/article/details/50719275 什么是Homography 在图1中有两张书的平面图,两张图分别有四个相对 ...
- java之Matcher类详解
在JDK 1.4中,Java增加了对正则表达式的支持. java与正则相关的工具主要在java.util.regex包中:此包中主要有两个类:Pattern.Matcher. Matcher 声明: ...
- ubuntu中使用 alien安装rpm包
我们可以使用alien 在ubuntu中安装rpm 包 使用方法: 安装 alien 安装 apt-get update apt-get install alien 帮助命令 Usage: ali ...
- JavaScript设计模式经典-面向对象中六大原则
作者 | Jeskson来源 | 达达前端小酒馆 1 主要学习JavaScript中的六大原则.那么六大原则还记得是什么了吗?六大原则指:单一职责原则(SRP),开放封闭原则(OCP),里氏替换原则( ...