内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

RxSwift Observable介绍、创建可观察序列

2018-06-08 16:38 出处:清屏网 人气: 评论(0

目前正在入门RxSwift,这是 我的笔记>>> ,按照课时整理,与大家共同进步。

1,Observable<T>

  • Observable<T> 这个类就是 Rx 框架的基础,我们可以称它为可观察序列。它的作用就是可以异步地产生一系列的 Event(事件),即一个 Observable<T> 对象会随着时间推移不定期地发出 event(element : T) 这样一个东西。
  • 而且这些 Event 还可以携带数据,它的泛型 <T> 就是用来指定这个 Event 携带的数据的类型。
  • 有了可观察序列,我们还需要有一个 Observer(订阅者)来订阅它,这样这个订阅者才能收到 Observable<T> 不时发出的 Event。

2,Event

查看 RxSwift 源码可以发现,事件 Event 的定义如下:

public enum Event<Element> {
    /// Next element is produced.
    case next(Element)
 
    /// Sequence terminated with an error.
    case error(Swift.Error)
 
    /// Sequence completed successfully.
    case completed
}

可以看到 Event 就是一个枚举,也就是说一个 Observable 是可以发出 3 种不同类型的 Event 事件:

3,创建Observable

//just()
    let observable1 = Observable.just(5)
    
    //of()
    //该方法接收可变的参数,但是参数的类型必须相同
    //虽然没显示地说明类型,但是swift也会自动推断类型
    let observable2 = Observable.of("A", "B", "C")
    
    //from()
    //改方法需要接收一个数组类型的参数
    //效果和上面的of相同
    let observable3 = Observable.from(["A", "B", "C"])
    
    //empty()
    //创建一个空的observable序列
    let observable4 = Observable<Int>.empty()
    
    //never()
    //创建一个永远不会停止发出Event的observable序列
    let observable5 = Observable<Int>.never()
    
    //error()
    //创建一个不会做任何操作,而是直接发送一个错误的observable序列
    enum MyError: Error {
        case A
        case B
    }
    let observable6 = Observable<Int>.error(MyError.A)
    
    //range()
    //下面两个样例的结果相同
    let observable7 = Observable.range(start: 1, count: 5)
    let observable8 = Observable.of(1,2,3,4,5)
    
    //repeatElement()
    //创建一个可以无限发出给定元素的observable序列
    let observable9 = Observable.repeatElement(1)
    
    //generate()
    //创建一个只有当所有条件都为true的时候才会给出动作的observable序列
    //下面两个样例的结果相同
    let observable10 = Observable.generate(initialState: 0, condition: {$0<=10}, iterate: {$0+2})
    let observable11 = Observable.of(0,2,4,6,8,10)
    
    //create()
    //该方法接收一个block形式的参数,对每一个过来的订阅者进行处理
    let observable12 = Observable<String>.create {observer in
        //对订阅者发出next事件,且携带一个数据hello world
        observer.onNext("hello world")
        //对订阅者发出.complated事件
        observer.onCompleted()
        //一个订阅者会有一个Disposable类型的返回值,所以结尾要return一个Disposable
        return Disposables.create()
    }
    //测试订阅
    observable12.subscribe {
        print($0)
    }
    
    //deferred()
    //创建一个observable工厂,通过传入一个block来执行延迟observable序列的创建行为,而这个block里就是真正的实例化序列的对象的地方。
    var isOdd = true
    
    let factory = Observable<Int>.deferred {
        isOdd = !isOdd
        
        if isOdd {
            return Observable.of(1,3,5,7)
        }else {
            return Observable.of(2,4,6,8)
        }
    }
    //第一次订阅测试
    factory.subscribe { (event) in
        print("\(isOdd)", event)
    }
    //第二次订阅测试
    factory.subscribe { (event) in
        print("\(isOdd)", event)
    }
    
    //interval()
    //创建的observable序列每隔一段时间会发出一个索引数的元素,而且会一直发送下去
    //下面方法每隔1秒发送一次,并且在主线程
    let observable13 = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
    observable13.subscribe { (event) in
        print(event)
    }
    
    //timer()
    //5秒后发出唯一一个元素0
    let observable14 = Observable<Int>.timer(5, scheduler: MainScheduler.instance)
    observable14.subscribe { (event) in
        print(event)
    }
    //5秒后创建一个序列,每隔1秒产生一个元素
    let observable15 = Observable<Int>.timer(5, period: 1, scheduler: MainScheduler.instance)
    observable15.subscribe { (event) in
        print(event)
    }

目前正在入门RxSwift,这是 我的笔记>>> ,按照课时整理,与大家共同进步。

分享给小伙伴们:
本文标签: RxSwiftObservable

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号