一、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)
-
}
转载:https://blog.csdn.net/Coding_Physical/article/details/116373516
查看评论