RXSwift 入坑记

2019-05-08 作者:计算机教程   |   浏览(119)

最近做了一个智能家居的APP,目前纯JS代码已经4000多行,不包括任何引入的库。还在不断升级改造中。。。这个项目到处都是异步。大多数都是3~4层调用。给我的感觉就是异步当你习惯了,你会发现很爽。下面举个最简单的例子? 

以前一直都是命令式编程,这个view干嘛,那个label干嘛,这样的代码写了几个世纪了,实在是疲劳了而且重复使用率很差。其实我是很早就知道这个RXSwift了,就是感觉很复杂会拖项目进度,一直不敢进坑。最近公司不忙,充实一下自己,为以后的项目铺好路子,捡起了响应式编程。如果哪里不对的,请各位指正,不懂的也可以评论,大家一起提高。废话说的太多了,下面开始:

你知道怎么返回一个异步调用的值吗? 

为什么要使用

我们编写的绝大部分代码都涉及到外部事件的响应。当一个用户操作控制的时候,我们需要写一个@IBAction来处理。我们需要观察通知来监测键盘如何更改位置。URL回话响应数据时,我们需要用闭包来执行。我们使用KVO来监听变量的改变。所有这些不同的系统都让我们的代码不必要的复杂。如果有一个一致统一的系统来处理这些呼叫/响应,那岂不是很好。RX就是这样一个系统。

也许你会这么干 

概念

所有Observable实例只是一个队列。

Observable队列比swift队列的好处就是他可以异步接受元素。这是RXSwift的核心,所有扩展都是在这个概念基础上的。

  • Observable(ObservableType)Sequence一样
  • ObservableType.subscribe(_:)Sequence.makeIterator()类似
  • ObservableType.subscribe(_:)拥有一个观察者对象(ObserverType)的参数,这个对象将被订阅自动接受队列事件和Observable所发出的元素,而不是手动的调用next()

如果一个Observable发出一个next事件Event.next(Element),她可以继续发出更多的事件。当然如果发出一个error事件Event.error(ErrorType)www.2003.com,或者一个完成事件Event.completed,Observable队列不会再给订阅者发送额外的事件。源代码里是一个递归枚举

public enum Event<Element> {

    /// Next element is produced.
    case next(Element)

    /// Sequence terminated with an error.
    case error(Error)

    /// Sequence completed successfully.
    case completed
}
            function getValue(){
                var a = 10;
                setTimeout( function(){
                    a  = 10;
                }, 10 );    
                return a;
            }

Observables and observers

Observables不会执行订阅的闭包除非有一个订阅者。下面的例子中,Observable的订阅闭包不会执行,因为她并没有订阅者。她只是一个可被订阅者。

 _ = Observable<String>.create { observerOfString -> Disposable in
     print("This will never be printed")
     observerOfString.on(.next(" 
		

本文由www.2003.com发布于计算机教程,转载请注明出处:RXSwift 入坑记

关键词: