RxSwift学习笔记3:生命周期/订阅
有了 Observable,我们还要使用 subscribe() 方法来订阅它,接收它发出的 Event。
let observal = Observable.of("a","b","c")
/*
第一种用法:
我们使用 subscribe() 订阅了一个 Observable 对象.
该方法的 block 的回调参数就是被发出的 event 事件,我们将其直接打印出来。
*/
let subscrioble = observal.subscribe { (event) in
print(event)
}
//一个 Observable 序列被创建出来后它不会马上就开始被激活从而发出 Event,而是要等到它被某个人订阅了才会激活它。
//而 Observable 序列激活之后要一直等到它发出了 .error 或者 .completed 的 event 后,它才被终结。
/*
(1)使用该方法我们可以手动取消一个订阅行为。
(2)如果我们觉得这个订阅结束了不再需要了,就可以调用 dispose() 方法把这个订阅给销毁掉,防止内存泄漏。
(2)当一个订阅行为被 dispose 了,那么之后 observable 如果再发出 event,这个已经 dispose 的订阅就收不到消息了。
*/
subscrioble.dispose()
/*
除了 dispose() 方法之外,我们更经常用到的是一个叫 DisposeBag 的对象来管理多个订阅行为的销毁:
我们可以把一个 DisposeBag 对象看成一个垃圾袋,把用过的订阅行为都放进去。
而这个 DisposeBag 就会在自己快要 dealloc 的时候,对它里面的所有订阅行为都调用 dispose() 方法。
*/
let disposeBag = DisposeBag()
/*
第二种用法:
通过不同的 block 回调处理不同类型的 event。
同时会把 event 携带的数据直接解包出来作为参数,方便我们使用。
*/
observal.subscribe(onNext: { (element) in
print(element)
}, onError:{ error in
print(error.localizedDescription)
}, onCompleted: {
print("完成了")
}, onDisposed: {
print("销毁了")
}).disposed(by: disposeBag)
//subscribe() 方法的 onNext、onError、onCompleted 和 onDisposed 这四个回调 block 参数都是有默认值的,即它们都是可选的。所以我们也可以只处理 onNext 而不管其他的情况。
observal.subscribe(onNext: { (element) in
print(element)
},onCompleted: {
print("完成了")
}).disposed(by: disposeBag)
/*
我们可以使用 doOn 方法来监听事件的生命周期,它会在每一次事件发送前被调用。
同时它和 subscribe 一样,可以通过不同的 block 回调处理不同类型的 event
do(onNext:) 方法就是在 subscribe(onNext:) 前调用
*/
observal
.do(onNext: { (element) in
print("++++监听下一个内容:", element)
}, onError: { (error) in
print("++++监听错误", error)
}, onCompleted: {
print("++++监听完成")
}, onSubscribe: {
print("++++订阅监听")
}, onSubscribed: {
print("++++已被订阅")
}, onDispose: {
print("++++被销毁了")
})
.subscribe(onNext: { (element) in
print("++++订阅内容:",element)
}, onError: { (error) in
print(error)
}, onCompleted: {
print("++++订阅完成")
}, onDisposed: {
print("++++订阅被销毁")
}).disposed(by: disposeBag)
/* ====>
++++订阅监听
++++已被订阅
++++监听下一个内容: a
++++订阅内容: a
++++监听下一个内容: b
++++订阅内容: b
++++监听下一个内容: c
++++订阅内容: c
++++监听完成
++++订阅完成
++++订阅被销毁
++++被销毁了
*/
RxSwift学习笔记3:生命周期/订阅的更多相关文章
- Angular 5.x 学习笔记(2) - 生命周期钩子 - 暂时搁浅
Angular 5.x Lifecycle Hooks Learn Note Angular 5.x 生命周期钩子学习笔记 标签(空格分隔): Angular Note on cnblogs.com ...
- MVC学习笔记---MVC生命周期及管道
ASP.NET和ASP.NET MVC的HttpApplication请求处理管道有共同的部分和不同之处,本系列将体验ASP.NET MVC请求处理管道生命周期的19个关键环节. ①以IIS6.0为例 ...
- AngularJs学习笔记-组件生命周期
组件生命周期 (1)组件生命周期钩子 constructor:组件创建时被创建 ngOnChanges: 父组件修改或初始化子组件的输入属性时被调用,如果子组件没有输入属性,则永远不会被调用,它的首次 ...
- Java Web学习笔记-Servle生命周期
Servlet会在服务器启动或第一次请求该Servlet的时候开始生命周期,在服务器停止的时候结束生命周期. 无论请求多少次Servlet,最多只有一个Servlet实例.多个客户端并发请求Servl ...
- android学习笔记 activity生命周期&任务栈&activity启动模式
activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序 ...
- iOS学习笔记—ViewController/生命周期
ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...
- MVC学习笔记---MVC生命周期
Asp.net应用程序管道处理用户请求时特别强调"时机",对Asp.net生命周期的了解多少直接影响我们写页面和控件的效率.因此在2007年和2008年我在这个话题上各写了一篇文章 ...
- Vue2学习笔记:实例生命周期
实例生命周期 每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 DOM .在这个 ...
- VUE 学习笔记 二 生命周期
1.除了数据属性,Vue 实例还暴露了一些有用的实例属性与方法.它们都有前缀 $,以便与用户定义的属性区分开来 var data = { a: 1 } var vm = new Vue({ el: ' ...
- Android学习笔记_18_Activity生命周期 及 跳转方式
一.Activity有三个状态: 1.当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态.它就是响应用户操作的Activity. 2. 当它上面有另外一个Activity,使它失去了焦点但 ...
随机推荐
- python中的迭代器 生成器 装饰器
什么迭代器呢?它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器,_ ...
- CH6901 骑士放置
原题链接 和棋盘覆盖(题解)差不多.. 同样对格子染色,显然日字的对角格子是不同色,直接在对应节点连边,然后就是二分图最大独立集问题. #include<cstdio> #include& ...
- http协议(一)一些基础知识
当我们在浏览器的地址栏中输入网址,然后点击回车,接着,浏览器就会呈现出我们需要的web界面,那么,这个界面是怎么产生的? web的界面是根据我们输入的URL(网址.地址),浏览器从服务器端获取对应的文 ...
- [最新原创电子书]lazarus开发者入门及中级教程
目前市面上没有任何一本完整的书,介绍Lazarus,Firebird这两个优秀的开发工具,同时还有一个作为他们之间桥梁的开发套件ZeosDBO,也没有任何完整的中文开发指南,本书以这三种开发套件为主线 ...
- 部署描述符(web.xml)和标注(annotation)
部署描述符(web.xml) 详细信息可在http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html上下载web- ...
- 跟我学Spring Boot(一)创建Spring Boot 项目
本人开发环境为idea15.02 + jdk8 步骤1: 步骤2: 步骤3: 步骤4: 步骤5: 相关目录介绍: resources/static:这里主要存放一些资源文件 例如 css.js.ima ...
- Ubuntu服务器如何搭建PPTPD(原创保证可用)
Ubuntu是一款基于linux的操作系统,无需许可和订购的费用,Ubuntu Server可以帮助您高效地扩展您的数据中心.它精简的架构和自动化部署的能力让您只需花费更少的运算能力和资源,便可提供更 ...
- 【Web】CSS实现绝对定位元素水平垂直居中
网页中常常需用让绝对定位元素水平垂直居中,下面介绍2种方法: 一 元素宽度未知 <!DOCTYPE html> <html lang="en"> <h ...
- 23.Xcode中常用的快捷键操作
1.工程导航器:command+1 浏览文件夹,控制器,图片等 2.显示/隐藏导航器面板:Command+0 隐藏左边工具栏 3.显示/隐藏实用工具面板:Command+Option+0 使用工具面板 ...
- 2018.10.25 洛谷P4187 [USACO18JAN]Stamp Painting(计数dp)
传送门 其实本来想做组合数学的2333. 谁知道是道dpdpdp. 唉只能顺手做了 还是用真难则反的思想. 这题我们倒着考虑,只需要求出不合法方案数就行了. 这个显然是随便dpdpdp的. f[i]f ...