前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxSwift 系列(一) -- Observables

RxSwift 系列(一) -- Observables

作者头像
Scott_Mr
发布2018-05-16 16:09:38
1.1K0
发布2018-05-16 16:09:38
举报

为什么使用RxSwift?

我们编写的代码绝大多数都涉及对外部事件的响应。当用户点击操作时,我们需要编写一个@IBAction事件来响应。我们需要观察通知,以检测键盘何时改变位置。当网络请求响应数据时,我们必须提供闭包来执行。我们使用KVO来检测变量的变化。所有这些不同的系统使我们的代码增加了不必要地复杂。如果有一个一致的系统来处理我们的所有的调用/响应代码,难道不是更好吗?Rx就是这样一个系统。

RxSwift是用于大多数主要语言和平台的响应扩展(即Rx)的正式实现。

概念

每一个Observable的实例都是一个序列

Observable序列相比于Swift序列的关键优势点在于它能够异步地接收元素。这是RxSwift精髓所在,其他的一切都扩展了这个概念。

  • Observable(ObservableType)等效于Sequence
  • observableType.subscribe(_:)方法等效于Sequence.makeIterator()
  • ObservableType.subscribe(_:)接收一个观察者ObserverType参数,它将被订阅自动接收由可观察到的序列事件和元素,而不是在返回的生成器上手动调用next()

如果一个Observable发出一个next事件(Event.next(Element)),它还能够继续发出更多的事件。但是,如果一个Observable发出一个error事件(Event.error(ErrorType))或者一个completed事件(Event.completed),那么这个Observable序列就不能给订阅者发送其他的事件了。

Observables and Observers(又名subscribers -- 订阅者)

除非有订阅者,否则Observable不会执行它们的闭包。 在下面的例子中,Observable的闭包将不会被执行,因为没有订阅者订阅。

代码语言:javascript
复制
_ = Observable<String>.create({ (observingString) -> Disposable in
        print("the code will not be executed")
        observingString.onNext("?")
        observingString.onCompleted()
        return Disposables.create()
    })

在下面的例子中,Observable的闭包将会被执行,因为有订阅者订阅。

代码语言:javascript
复制
_ = Observable<String>.create({ (observingString) -> Disposable in
        print("the code will be executed")
        observingString.onNext("?")
        observingString.onCompleted()
        return Disposables.create()
    }).subscribe({ (event) in
        print(event)
    })

我们现在不必担心上面例子中的Observable是怎样被创建出来,我会和大家一步一步深入学习。

subscribe(_:)返回一个一次性的实例,该实例表示一个可使用的资源,如订阅。在前面的简单示例中,它被忽略了,但是应该正常地处理它。这通常意味着将它添加到一个DisposeBag实例中。

Creating and Subscribing to Observables

有几种方式创建和订阅Observables:

注意:此处用到了subscribe(onNext:)的便利构造方法,有部分参数使用的是默认值。

致谢

若发现有错误的地方,欢迎各位评论,感谢!同时也希望能够帮助到有需要的同学。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么使用RxSwift?
  • 概念
  • Observables and Observers(又名subscribers -- 订阅者)
  • Creating and Subscribing to Observables
  • 致谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档