学 RxSwift - Observable

一、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)
}

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值