RxSwift 之官方文档
RxSwift
官方文档结构
- Introduction:
- Subjects
- Transforming Observables
- Filtering Observables
- Combining Observables
- Error Handing Operators
- Observable Utility Operators
- Conditional and Boolean Operators
- Mathematical and Aggregate Operators
- Connectable Observable Operatiors
Observable
Observable 是观察者模式中被观察的对象,相当于一个事件序列(GeneratorType), 会向订阅者发送新产生的事件信息。
事件信息分为:
.Next(value): 表示新的事件数据
.Completed: 表示事件序列完结
.Error: 异常导致的事件序列完结
Subjects
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.
Subject可以看做是一种代理和桥梁。它既是订阅者又是订阅源,这意味着它既可以订阅其他Observables,同时又可以对他的订阅者发送事件
1. How To Create Observables ?
empty:
empty creates an empty sequence.
The only message it sends is the .Completed message. let emptySequence = Observable<Int>.empty()never:
never creates a sequence that never sends any element or completes. let neverSequence = Observable<Int>.never()just (一个元素)
just represents sequence that contains one element.
It sends two messages to subscribers.
The first message is the value of single element and the second
message is .Completed. let singleElementSequence = Observable.just(32)sequenceOf (一系列元素)
sequenceOf creates a sequence of a fixed number of elements.from (将swift的序列(SequenceType) 转换为事件序列)
from creates a sequence from SequenceType let sequenceFromArray = [1, 2, 3, 4, 5].toObservable()create (通过闭包创建序列)
create creates sequence using Swift closure.
This examples creates custom version of just operator. let myJust = { (singleElement: Int) -> Observable<Int> in
return Observable.create { observer in
observer.on(.Next(singleElement))
observer.on(.Completed) return NopDisposable.instance
}
} let subscription = myJust(5)
.subscribe { event in
print(event)
}generate
generate creates sequence that generates its values and determines
when to terminate based on its previous values. let generated = Observable.generate(
initialState: 0,
condition: { $0 < 3 },
iterate: { $0 + 1 }
) let subscription = generated
.subscribe { event in
print(event)
}failWith
create an Observable that emits no items and terminates with an error let error = NSError(domain: "Test", code: -1, userInfo: nil)
let erroredSequence = Observable<Int>.error(error)deferred (加载延迟, 订阅者的内容相同而完全独立)
do not create the Observable until the observer subscribes,
and create a fresh Observable for each observer
2. How To Create Subjects
PublishSubject(发送订阅者从订阅之后的事件序列)
PublishSubject emits(发出) to an observer only those items that
are emitted by the source Observable(s) subsequent to the
time of the subscription. example("PublishSubject") {
let disposeBag = DisposeBag() let subject = PublishSubject<String>()
writeSequenceToConsole("1", sequence: subject).addDisposableTo(disposeBag)
subject.on(.Next("a"))
subject.on(.Next("b"))
writeSequenceToConsole("2", sequence: subject).addDisposableTo(disposeBag)
subject.on(.Next("c"))
subject.on(.Next("d"))
}
1 - a
1 - b
1 - c
2 - c
1 - d
2 - dReplaySubject (在新订阅对象订阅的时候会补发所有已经发送过的数据列, buffize: 是缓冲区的大小, 为1时,那么新订阅者出现的时候就补发上一个事件,如果是2, 就补发2个 ,…)
ReplaySubject emits to any observer all of the items that
were emitted by the source Observable(s), regardless of
when the observer subscribes. example("ReplaySubject") {
let disposeBag = DisposeBag()
let subject = ReplaySubject<String>.create(bufferSize: 1) writeSequenceToConsole("1", sequence: subject).addDisposableTo(disposeBag)
subject.on(.Next("a"))
subject.on(.Next("b"))
writeSequenceToConsole("2", sequence: subject).addDisposableTo(disposeBag)
subject.on(.Next("c"))
subject.on(.Next("d"))
}
print:
1 - a
1 - b
2 - b // 补发1个
1 - c
2 - c
1 - d
2 - dBehaviorSubject (在新的订阅对象订阅的时候回发送最近发送的事件,如果没有,则发送一个默认值)
When an observer subscribes to a BehaviorSubject, it begins
by emitting the item most recently emitted by the source
Observable (or a seed/default value if none has yet been emitted)
and then continues to emit any other items emitted later
by the source Observable(s). example("BehaviorSubject") {
let disposeBag = DisposeBag() let subject = BehaviorSubject(value: "z")
writeSequenceToConsole("1", sequence: subject).addDisposableTo(disposeBag)
subject.on(.Next("a"))
subject.on(.Next("b"))
writeSequenceToConsole("2", sequence: subject).addDisposableTo(disposeBag)
subject.on(.Next("c"))
subject.on(.Next("d"))
subject.on(.Completed)
}
print:
1 - z
1 - a
1 - b
2 - b
1 - c
2 - c
1 - d
2 - d
1 - com
2 - comVariable (是基于BehaviorSubject的一层封装, 它的优势: 不会被显示的终结,即:不会受到.Complete或者.Error这类终结事件,它会主动在析构的时候发送.Complete)
Variable wraps BehaviorSubject. Advantage of using variable over
BehaviorSubject is that variable can never explicitly complete
or error out, and BehaviorSubject can in case Error or Completed
message is send to it. Variable will also automatically complete
in case it"s being deallocated. example("Variable") {
let disposeBag = DisposeBag()
let variable = Variable("z")
writeSequenceToConsole("1", sequence: variable.asObservable()).addDisposableTo(disposeBag)
variable.value = "a"
variable.value = "b"
writeSequenceToConsole("2", sequence: variable.asObservable()).addDisposableTo(disposeBag)
variable.value = "c"
variable.value = "d"
}
3. Transforming Observables
- map/select

More info in reactive.io website
example("map") {
let originalSequence = Observable.of(1, 2, 3)
_ = originalSequence
.map { number in
number * 2
}
.subscribe { print($0) }
}
RxSwift 之官方文档的更多相关文章
- 【AutoMapper官方文档】DTO与Domin Model相互转换(上)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 2DToolkit官方文档中文版打地鼠教程(三):Sprite Collections 精灵集合
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- 2DToolkit官方文档中文版打地鼠教程(一):初始设置
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(中)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(下)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- Ionic2系列——Ionic 2 Guide 官方文档中文版
最近一直没更新博客,业余时间都在翻译Ionic2的文档.之前本来是想写一个入门,后来觉得干脆把官方文档翻译一下算了,因为官方文档就是最好的入门教程.后来越翻译越觉得这个事情确实比较费精力,不知道什么时 ...
- Kotlin开发语言文档(官方文档)-- 目录
开始阅读Kotlin官方文档.先上文档目录.有些内容还未阅读,有些目录标目翻译还需琢磨琢磨.后续再将具体内容的链接逐步加上. 文档链接:https://kotlinlang.org/docs/kotl ...
- 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍
我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...
随机推荐
- phpstrom 快捷使用方式
file-settings--key map键映射-->collapse(代码折叠)---- ctrl (减减)2次全部折叠 (加加)2次全部展开 格式化代码 ctrl+alt+L 替换 c ...
- HDU 1017 A Mathematical Curiosity(枚举)
题目链接 Problem Description Given two integers n and m, count the number of pairs of integers (a,b) suc ...
- FZU 1894 志愿者选拔 单调队列
训练赛的题…… 暴力一波明显超时…… 最近刚学stl 感觉是优先队列 但还是太会用…… 以后可以试一下优先队列…… 比赛之后百度了一下 发现是单调队列…… 看起来挺简单的 也算个模版题吧…… 总之思路 ...
- 动态封杀与解封IP
不论IIS6还是IIS7 都可以把需要封杀的IP加入封杀列表.但是需要注意的是我们代码写的是全部替换原先的数据.但是在IIS7下,执行的效果是原先的不替换,新加一批封杀 IP.当然IIS7下,如果新加 ...
- 【笔记】虚拟机用Xshell登陆报错“ssh服务器拒绝了密码”解决方法
自己本地安装了VMware Workstation之后,创建虚拟机,一开始是可以用Xshell登陆的,几天后,重启了电脑以及虚拟机,发现无法登陆了,还没有输入密码就有如下报错信息 这时候开始排查原因, ...
- great C++ socket library
NETLINK: http://netlinksockets.sourceforge.net/index.html
- linux nfs开启
nfs设置: NFS的配置过程很简单.在服务器端中编辑/etc/exports文件,添加如下内容: /home/cotton/data/cotton/zghy 192.168.2.*(rw,s ...
- 常用 ajax js 表单
$(function () { /** * 图片点击放大处理 */ $('.mini_img').click(function () { $(this).hide().next().show(); } ...
- 【读书笔记】Linux源码注释
第二章 大概的内部组成 IO端口寻址: 统一寻址: 就是把地址归入存储器寻址范围. 独立寻址: 跟存储器分开,专门的寻址空间 没怎么理解, PC机一般都是采用独立寻址, 见下图 在linux里,可以在 ...
- python selenium基本
基本 from selenium import webdriver import re driver = webdriver.Firefox() driver.get('https://www.goo ...