RxSwift 之官方文档

RxSwift

官方文档结构

  1. Introduction:
  2. Subjects
  3. Transforming Observables
  4. Filtering Observables
  5. Combining Observables
  6. Error Handing Operators
  7. Observable Utility Operators
  8. Conditional and Boolean Operators
  9. Mathematical and Aggregate Operators
  10. 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 ?

  1. empty: 

    empty creates an empty sequence. 
    The only message it sends is the .Completed message.let emptySequence = Observable<Int>.empty()
  2. never:

    never creates a sequence that never sends any element or completes.let neverSequence = Observable<Int>.never()
  3. 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)
  4. sequenceOf (一系列元素)

    sequenceOf creates a sequence of a fixed number of elements.
  5. from (将swift的序列(SequenceType) 转换为事件序列)

    from creates a sequence from SequenceTypelet sequenceFromArray = [1, 2, 3, 4, 5].toObservable()
  6. create (通过闭包创建序列)

    create creates sequence using Swift closure. 
    This examples creates custom version of just operator.let myJust = { (singleElement: Int) -> Observable<Int> inreturn Observable.create { observer inobserver.on(.Next(singleElement))observer.on(.Completed)return NopDisposable.instance}
    }let subscription = myJust(5).subscribe { event inprint(event)
    }
  7. 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 inprint(event)
    }
  8. failWith

    create an Observable that emits no items and terminates with an errorlet error = NSError(domain: "Test", code: -1, userInfo: nil)
    let erroredSequence = Observable<Int>.error(error)
  9. deferred (加载延迟, 订阅者的内容相同而完全独立)

    do not create the Observable until the observer subscribes, 
    and create a fresh Observable for each observer

2. How To Create Subjects

  1. 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 - d
  2. ReplaySubject (在新订阅对象订阅的时候会补发所有已经发送过的数据列, 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 - d 
  3. BehaviorSubject (在新的订阅对象订阅的时候回发送最近发送的事件,如果没有,则发送一个默认值)

    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 - com
  4. Variable (是基于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

  1. map/select

More info in reactive.io website

example("map") {let originalSequence = Observable.of(1, 2, 3)_ = originalSequence.map { number innumber * 2}.subscribe { print($0) }
}

转载于:https://www.cnblogs.com/Jenaral/p/5718538.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019年甘肃省普通高等学校高职(专科)升本科考试招生工作实施办法

2019年甘肃省普通高等学校高职&#xff08;专科&#xff09;升本科考试招生工作实施办法 2019年甘肃省普通高等学校高职&#xff08;专科&#xff09;升本科考试招生工作实施办法 根据教育部有关规定及要求&#xff0c;结合我省实际&#xff0c;为确保普通高等学校高职&#x…

HTML基础之bit哥的反客为主之道(9)

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 目录 HTML基…

Atom编辑Markdown文件保存后行尾的空格自动消失的问题解决

Markdown文件的行尾增加两个空格表示一行结束需要换行。 但保存文件后&#xff0c;行尾的空格自动消失&#xff0c;导致不换行。 解决方法&#xff1a; 1、【Edit】->【Preferences】->【Packages】->【whitespace】->【Settings】->【Keep Markdown Line Brea…

将Abp移植进.NET MAUI项目

前言写在.NET MAUI官宣正式发布之际&#xff0c;热烈庆祝MAUI正式发布&#xff01;去年12月份做了MAUI混合开发框架的调研&#xff0c;想起来文章里给自己挖了个坑&#xff0c;要教大家如何把Abp移植进Maui项目。熟悉Abp的同学都知道&#xff0c;Abp 是一套强大的应用程序设计时…

采用ArcGIS 10.6制作漂亮的点阵世界地图,完美!!!

如下图所示,怎样制作完美漂亮的点阵世界地图呢?今天我就教大家吧! 其实,制作过程相当简单,主要的思路是通过世界地图范围去创建渔网(标注点),再选择范围内的标注点,符号化即可,怎么样,很简单吧,下面我们一步一步来实现吧。 1. 加载世界地图 打开ArcGIS软件,加载软…

懒办法1篇文10分钟快速入门MySQL增删查改

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;InfoQ签约作者&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你…

大话领域驱动设计——领域层

概述在DDD中&#xff0c;业务逻辑主要分布在领域层和应用层两层&#xff0c;他们包含不同的业务逻辑。这一篇&#xff0c;我们先对领域层做详细的讲解分析。领域层实现了领域或系统的&#xff0c;与用户界面上的用户交互&#xff08;用例&#xff09;无关的核心业务逻辑。总览领…

【北斗】北斗卫星导航系统(BDS)介绍

一、概述 北斗卫星导航系统(以下简称北斗系统)是中国着眼于国家安全和经济社会发展需要,自主建设运行的全球卫星导航系统,是为全球用户提供全天候、全天时、高精度的定位、导航和授时服务的国家重要时空基础设施。 北斗系统提供服务以来,已在交通运输、农林渔业、水文监…

正则验证金额大于等于0,并且只到小数点后2位

2019独角兽企业重金招聘Python工程师标准>>> ^(([0-9]|([1-9][0-9]{0,9}))((\.[0-9]{1,2})?))$ 转载于:https://my.oschina.net/u/934148/blog/528688

我结婚了,我要用什么做个邀请函呢?【iVX无代码YYDS 06】

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;InfoQ签约作者、CSDN新星导师&#xff0c;华为云享专家。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#…

《微软云计算Microsoft Azure部署与管理指南》即将上市!!!

大家好&#xff0c;本人新作《微软云计算Microsoft Azure部署与管理指南》即将与广大读者见面&#xff0c;由电子工业出版社出版。希望大家能关注此书&#xff0c;并推荐给身边的好友和技术人员。 众所周知&#xff0c;Microsoft Azure是专业的国际化公有云平台, 是微软研发的公…

如何解决分布式日志exceptionless的写入瓶颈

我们都知道在分布式日志当中&#xff0c;exceptionless客户端是把日志写到Elasticsearch数据库&#xff0c;就像我们把数据写入到关系数据库一样&#xff1b;既然是写入&#xff0c;那么在短时间大数据量的情况下&#xff0c;写入就会涉及到效率的问题&#xff1b;首先我们看下…

iVX 基础

1.1 iVX 线上集成环境进入 点击 连接 或通过浏览器输入网址 https://editor.ivx.cn/ 进入线上集成开发环境。 进入 在线集成开发环境 后&#xff0c;可点击右上角 登录/注册 进行帐号登录或者注册。登录账户 后在进行项目开发时会自动保存项目开发进度。 [外链图片转存失败…

Android之靠谱的把图片和视频插入手机系统相册

1 需求 把图片和视频插入手机系统相册,网上查了下基本上很乱,没几个靠谱的。 2 结果爆照 3 思路 图片插入系统相册(可以直接插入系统相册,但是我这里多做了一步就是先把图片拷贝到了一个目录再插入系统相册) 视频插入系统相册(先把视频拷贝到MIUI目录,然后再…

C# WPF 实现Tab页动态增减

概述Tab页面是一个很常用的控件&#xff0c;针对页面固定的场景&#xff0c;直接给Item进行数据绑定就行&#xff0c;如下所示&#xff1a;<dx:DXTabControl cal:Message.Attach"[Event Loaded][TabControl_Loaded($source,$eventArgs)]"><dx:DXTabItem Hea…

2014 网选 上海赛区 hdu 5047 Sawtooth

题意&#xff1a;求n个M型的折线将一个平面分成的最多的面数&#xff01; 思路&#xff1a;我们都知道n条直线将一个平面分成的最多平面数是 An An-1 n1 也就是f(n) (n*n n 2)/2 对于一个M型的折线呢&#xff1f;它有四条线&#xff0c;但是由于三个顶点的关系导致划分的平…

二、基础(IVX快速开发手册)

二、基础 通过本节你将了解 iVX 所支持应用的创建方法。 文章目录二、基础2.1 iVX 线上集成环境进入2.2 创建项目2.3 选择项目类型2.3.1 WebApp/小程序/原生应用2.3.2 微信小游戏2.3.3 微信小程序&#xff08;原生组件&#xff09;2.1 iVX 线上集成环境进入 点击 连接 或通过…

Android之TabLayout+ViewPager2+FragmentStateAdapter实现带数字变化的TAB选项

1 问题 TabLayout+ViewPager2实现带数字变化的TAB选项,然后左边滑动或者点击上面的Tab切换fragment不能刷新 2 结果爆照 3 代码实现 layer_tab_indicator.xml <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="h…

slq2000数据库升级到sql2012

看到标题&#xff0c;估计有同行笑了&#xff0c;这年代还有用sql2000的&#xff1f;真的有&#xff0c;最近单位服务器数据迁移升级&#xff0c;将数据库迁移到新服务器后&#xff0c;发现数据全是2000的&#xff0c;无法直接导入到sql2012。没办法&#xff0c;只能先将数据库…

电脑网页打不开但qq能上解决方法

2019独角兽企业重金招聘Python工程师标准>>> 问题描述&#xff1a; 电脑网页打不开但qq能上。 问题原因&#xff1a; 是由于电脑系统的DNS解析出了问题。 解决方法&#xff1a; 首先在键盘上同时按下 winR 然后在弹窗中输入cmd &#xff0c; 再按enter键&#xf…