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,一经查实,立即删除!

相关文章

SQL一键备份用户数据库

大家都知道&#xff0c;Ms Sql 有自动备份的功能&#xff0c;但如果由于某种原因不能自动备份&#xff0c;或者我们想手动备份的话&#xff0c;就可以用下边的sql语句来执行备份。 --------------------代码开始------------- USE [master]------删除旧数据-------------------…

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 是一套强大的应用程序设计时…

Sql数据库批量清理日志

说明&#xff1a;SQL数据库日志经常过大&#xff0c;引起很多问题&#xff0c;网上很多清理日志的方法&#xff0c;但都比较麻烦&#xff0c;并且不能一次性清理所有数据库。如果有几十个数据库要清理&#xff0c;一个个手工来&#xff0c;想必非常麻烦。 以下代码清除 除了指定…

【BZOJ-2299】向量 裴蜀定理 + 最大公约数

2299: [HAOI2011]向量 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1118 Solved: 488[Submit][Status][Discuss]Description 给你一对数a,b&#xff0c;你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量&#xff0c;问你能不能拼…

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

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

Android ping命令 -- Runtime

代码&#xff1a; 1 public String Run(String _strsIp) throws Exception2 {3 String strRst "";4 try5 {6 String str "ping -c 1 "_strsIp;7 Runtime runtime Runtime.getRuntime();8 …

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

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

Android(kotlin)之对一组图片数据更新最后的修改时间进行分类显示

1 需求 我们需要实现携带时间头的一系列照片如下显示,现在我们拿到了图片集合,肯定需要对图片根据实现进行分组显示 date picture picture picture picture picture picture picture picture picturedate picture picture picture picture picture 2 代码实现 fun getImag…

SqlServer 数据库 分离复制备份然后附加回数据库 sql代码

工作中&#xff0c;我们经常需要把数据库进行分离&#xff0c;复制数据库到另一个地方&#xff0c;再将原数据库文件附加回数据库 。 当然通过鼠标操作的步骤比较麻烦&#xff1a; 1、 右键数据库 --------任务------分离 2、打开数据库文件所在目录&#xff0c;复制数据库 …

01:操作系统(centos,redhat):性能监控和网络命令

性能监控和优化命令 top命令功能&#xff1a;显示当前系统正在执行的进程的相关信息&#xff0c;包括进程ID、内存占用率、CPU占用率等常用参数&#xff1a;-d 屏幕刷新间隔时间屏幕信息解释字段说明&#xff1a;第一行&#xff1a;top 当前系统时间up 系统运行时间…

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

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

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

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

Android之解决VideoView控件的进度条位置摆放问题和打开播放黑屏问题

1 问题 VideoView控件如何配合MediaController使用,就会显示进度条,但是位置摆放在最底部,不是我们想要的结果 2、基本使用 private var mMediaController:MediaController? = nullfun playVedio() {mMediaController = MediaController(this as Activity)trashVideoView…

Snmp linux

http://blog.csdn.net/youngqj/article/details/7311849 http://blog.csdn.net/howema/article/details/4182408 http://my.oschina.net/yisenn/blog/14626转载于:https://www.cnblogs.com/diyunpeng/p/5720952.html

正则验证金额大于等于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;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#…

【专升本计算机】计算机文化基础练习题(选择题300道附答案)

专升本计算机文化基础练习题 1、 世界上第一台电子计算机诞生于 ______A_ 。 A . 20 世纪 40 年代 B . 19 世纪 C . 20 世纪 80 年代 D . 1950 年 2、 世界上第一台电子计算机是 1946 年在美国研制成功的,该机的英文缩写名是 ___A__ 。 A . ENIAC B . EDVAC C…