前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【iOS开发】RxSwift入门:从Observable.create讲起

【iOS开发】RxSwift入门:从Observable.create讲起

作者头像
吴老师
发布2018-09-05 10:57:19
7030
发布2018-09-05 10:57:19
举报

刚学习RxSwift的时候,到github看文档,搜索别人的博客。基本上都是从那些例子讲起,像下面这样,自己再跟着用playground写一篇。

代码语言:javascript
复制
example("of") { 
    let one = 1
    let two = 2
    let three = 3
    
    let observable = Observable.of(one, two, three)
    
    observable.subscribe({ (event) in
        
        if let element = event.element {
            print(element)
        }
    })
    
    observable.subscribe(onNext: { (element) in
        print(element)
    })
}

通过这样的方式,可以了解RxSwift的用法。但是,有时候,如果能先讲明白原理,再去写代码,写例子,知道自己在写什么,知道它的运行原理,可能会更快的学会它的运用。

先看一下Event的定义:

代码语言:javascript
复制
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枚举:接收一个泛型元素,有三个成员,next,error,completed。再说一下它跟Observable的关系,Observable发送的所有事件都是一个Event,同一个Observable发送的Event的泛型参数的类型肯定是一样的,就是说一个Observable不会即发送String又发送Int。像just empty等都是Observable的子类,就是内部封装好了泛型Element类型的特定Observable。

下面来看一下Observalbe.create:

代码语言:javascript
复制
let someObservable = Observable<Bool>.create({ (observer) -> Disposable in

    observer.onNext(true);            
    observer.onCompleted()

    return Disposables.create() 
});

咋一看好像没什么用,Observer的next事件都写好了,但是这个Observable是可以异步的。就是说这个闭包里面是可以执行异步代码的。以一个读取商品信息的网络请求为例,可以这样写:

代码语言:javascript
复制
let someObservable = Observable<GoodsModel>.create({ (observer) -> Disposable in

    GoodsApi.request() {
        if (请求成功) {
            observer.onNext(解析好的GoodsModel)           
    
        }
        else {
            observer.onError(error)
        }

        observer.onCompleted()
    }
    

    return Disposables.create() 
});

创建这个Observable再订阅,那么你就可以通过异步的方式获取网络返回的结果了。这跟OC时代用RACCommand做网络请求封装比较相似。将上面的Observable做为一个方法的返回值,放到ViewModel里面。在Controller里面调用方法,再订阅,流程就比较清晰了。

不知道这样讲,相对于一开始就看那些例子有没有更清晰一点。

要记得一点:Observable发送的所有事件都是一个Event对象,即我们订阅一个Observable收到的任何事件都是一个Event

想看RACCommand写法的同学可以去看一下我的另一篇文章: MVVM中使用RACCommand封装网络请求

如果文章对您有帮助,就关注一下点个赞吧,我会持续写一些实际开发中遇到的问题,代码写法相关的文章。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.10.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档