RxSwift学习

编程思想

  • 用同步的方式,编写处理异步事件的代码。是基于异步 Event(事件)序列的响应式编程。它可以简化异步编程方法,并提供更优雅的数据绑定。让我们可以时刻响应新的数据的同时顺序地处理它们。

我们可以定义一个以时间为维度的数组,它的元素是异步发生的事件。当事件发生时,我们就把它自动添加到这个数组里。然后,我们可以做两个事情,一方面,可以对添加进来的事件进行“二次加工”,筛选出符合我们要求的事件形态;另一方面,我们还可以添加对应事件的处理方法,这也就是某种形式的”订阅”。

例如:RxSwift 给UITextField添加了一个新的属性rx_text,我们暂时忽略掉它的具体类型,把它理解为就是那个“以时间为维度的数组”就可以了。
而这个数组中事件的值,就是每一次用户输入之后,当前UITtextField中的字符串(注意:这里指的是输入之后,UITextField中的字符串,不是每一次用户输入的单个字符)。

定义事件

对于每一个添加到“数组”中的事件,都存在三种可能:

  • 成功:对于UITextField例子来说,就是用户输入了一个字符,让UITextField有了新的值;
  • 失败:在处理类似网络请求时,会处理这种事件;
  • 完成:表示“数组”中再也不会添加新的事件;

RxSwift 使用enum来表示它,但是对于不同类型的成功事件,它包含的值有可能是不相同的,因此,它使用一个泛型的enum来表达一个发生的事件:

    /// Binds event to user interface.
    ///
    /// - In case next element is received, it is being set to control value.
    /// - In case error is received, DEBUG buids raise fatal error, RELEASE builds log event to standard output.
    /// - In case sequence completes, nothing happens.
    public func on(_ event: Event) {
        switch event {
        case .error(let error):
            bindingError(error)
        case .next:
            _valueSink.on(event)
        case .completed:
            _valueSink.on(event)
        }
    }

订阅事件

你可能感兴趣的:(RxSwift学习)