飞道的博客

学 RxSwift - Observable

225人阅读  评论(0)

一、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  需要传递一个数组参数

打印事件


  
  1. let observable = Observable.from([ "A", "B", "C"])
  2. observable.subscribe{
  3. event in print(event)
  4. }

5.deferred 相当于创建一个Observable工厂,通过传入一个block来执行延迟Observable序列创建的行为,而这个block里就是真正的实例化对象的地方


  
  1. var isOld = true
  2. let factory : Observable<Int> = Observable.deferred {
  3. isOld = !isOld
  4. if isOld {
  5. return Observable.of( 1, 3, 5, 7, 9)
  6. } else{
  7. return Observable.of( 2, 4, 6, 8, 10)
  8. }
  9. }
  10. factory.subscribe{
  11. event in print("\(isOld)",event)
  12. }
  13. factory.subscribe{
  14. event in print("\(isOld)",event)
  15. }

 

inernal()每隔一段设定的时间,会发出一个索引的元素,而且会一直发送下去


  
  1. let observable = Observable< Int>.interval( 1, scheduler: MainScheduler.instance)
  2. observable.subscribe{
  3. event in print(event)
  4. }

timer() 


  
  1. // 用法一:
  2. // 5秒种后发出唯一的一个元素0
  3. let observable = Observable< Int>.timer( 5, scheduler: MainScheduler.instance)
  4. observable.subscribe { event in
  5. print(event)
  6. }
  7. // 用法二:
  8. // 延时5秒种后,每隔1秒钟发出一个元素
  9. let observable = Observable< Int>.timer( 5, period: 1, scheduler: MainScheduler.instance)
  10. observable.subscribe { event in
  11. print(event)
  12. }

 

 

 

 

 

 

 

 

 

 

 


转载:https://blog.csdn.net/Coding_Physical/article/details/116373516
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场