一、Observable-可观察序列
代表的是一个可观察序列,就一个被观察者,会向观察对象发送事件序列。举个例子 冰箱的温度看作一个序列,当温度高于冷藏室的问题冰箱就会开启降温操作
作用:
Observable对象会随着时间推移不定期发出event;event可以携带数据,这个数据类型是泛型;最终需要一个观察者来捕获到事件数据。
二、Event--事件
事件有三种 next(正常执行)error( 错误执行结束)completed( 完整执行结束)
next:可以携带数据的事件
error:一个携带具体错误内容的错误,发出error Event,一旦触发就终止该序列
completed:observable发出的事件正常结束。发出completed event ,就终止
三、Observable和Sequence比较
联系:
- 一个
Observable(ObservableType)
相当于一个序列Sequence(SequenceType)
。 ObservableType.subscribe(_:)
方法相当于SequenceType.generate()
。
区别:
- Swift 中的
SequenceType
是同步的循环,而Observable
是异步的。 Observable
对象会在有任何Event
时候,自动将Event
作为一个参数通过ObservableType.subscribe(_:)
发出,并不需要使用next
方法。
四、实践
1.create()通过指定的方法来实现自定义一个被观察的序列
2. just() 通过一个默认值进行初始化
let observable = Observable<Int>.just(1)
3. of()of
可以接受可变数量的参数(必需要是同类型的)
let observable = Observable.of("A","B","C")
4.from 需要传递一个数组参数
打印事件
let observable = Observable.from(["A", "B", "C"])
observable.subscribe{
event in print(event)
}
5.deferred 相当于创建一个Observable工厂,通过传入一个block来执行延迟Observable序列创建的行为,而这个block里就是真正的实例化对象的地方
var isOld = true
let factory : Observable<Int> = Observable.deferred {
isOld = !isOld
if isOld {
return Observable.of(1,3,5,7,9)
}else{
return Observable.of(2,4,6,8,10)
}
}
factory.subscribe{
event in print("\(isOld)",event)
}
factory.subscribe{
event in print("\(isOld)",event)
}
inernal()每隔一段设定的时间,会发出一个索引的元素,而且会一直发送下去
let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
observable.subscribe{
event in print(event)
}
timer()
// 用法一:
// 5秒种后发出唯一的一个元素0
let observable = Observable<Int>.timer(5, scheduler: MainScheduler.instance)
observable.subscribe { event in
print(event)
}
// 用法二:
// 延时5秒种后,每隔1秒钟发出一个元素
let observable = Observable<Int>.timer(5, period: 1, scheduler: MainScheduler.instance)
observable.subscribe { event in
print(event)
}