接着上篇RXSwift初体验继续深入了解RXSwift
- 首先来一个空的序列 - 本来序列事件是Int类型的,这里调用emty函数 没有序列,只能complete
let emtyOb = Observable<Int>.empty()
let _ = emtyOb.subscribe(onNext: { (number) in
print("订阅:",number)
}, onError: { (error) in
print("error:",error)
}, onCompleted: {
print("完成回调")
}) {
print("释放回调")
}
- 单个信号序列创建
let array = ["LG_Cooci","LG_Kody"]
Observable<[String]>.just(array)
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
let _ = Observable<[String]>.just(array).subscribe(onNext: { (number) in
print("订阅:",number)
}, onError: { (error) in
print("error:",error)
}, onCompleted: {
print("完成回调")
}) {
print("释放回调")
}
- 多个元素 - 针对序列处理
Observable<String>.of("LG_Cooci","LG_Kody")
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
// 字典
Observable<[String: Any]>.of(["name":"LG_Cooci","age":18])
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
// 数组
Observable<[String]>.of(["LG_Cooci","LG_Kody"])
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
- 从集合中获取序列:数组,集合,set 获取序列 - 有可选项处理 - 更安全
Observable<[String]>.from(optional: ["LG_Cooci","LG_Kody"])
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
- 使用deferred()方法延迟Observable序列的初始化,通过传入的block来实现Observable序列的初始化并且返回。
var isOdd = true
let _ = Observable<Int>.deferred { () -> Observable<Int> in
// 这里设计我们的序列
isOdd = !isOdd
if isOdd {
return Observable.of(1,3,5,7,9)
}
return Observable.of(0,2,4,6,8)
}
.subscribe { (event) in
print(event)
}
通过以上的例子我们可以看出Observable的创建主要有下列几种方法
- emty: 创建一个空的序列-但是只能订阅到complete
- just: 构建一个只有一个元素的Observable队列 - 订阅完信息自动complete
- of: 创建一个固定数量元素的Observable序列
- from: 从一个序列(如Array/Dictionary/Set)中创建一个Observable序列。
- deferred: 为每一个订阅者创建一个新的Observable序列
- generate: 创建一个Observable序列,只要提供的条件值为true就可以生成值。
- error: 创建一个不会发送任何条目并且立即终止错误的Observable序列
- range: 创建一个Observable序列,它会发出一系列连续的整数,然后终止
- timer: 获取计时器Observable序列
- interval: 底层就是封装timer
Observable 的销毁
- .disposed(by: disposeBag DisposeBag 来管理多个订阅行为的销毁
总结RXSwift流程详解
- 创建序列信息
- 订阅序列信息,创建observers保存所有我们的订阅者订阅者就是保存⼀一段代码块
- 发送响应,遍历我们的observers,让我们的所有的订阅者发送响应