RxSwift - 学习笔记三

2020-11-12  本文已影响0人  菲特峰

除了 Observable,RxSwift 还为我们提供了一些特征序列(Traits):Single、Completable、Maybe、Driver、ControlEvent。
我们可以将这些 Traits 看作是 Observable 的另外一个版本。它们之间的区别是:
Observable 是能够用于任何上下文环境的通用序列。
而 Traits 可以帮助我们更准确的描述序列。同时它们还为我们提供上下文含义、语法糖,让我们能够用更加优雅的方式书写代码

发出一个元素,或一个 error 事件
不会共享状态变化

.success:里面包含该 Single 的一个元素值
.error:用于包含错误

public enum SingleEvent<Element> {
    case success(Element)
    case error(Swift.Error)
}

不会发出任何元素
只会发出一个 completed 事件或者一个 error 事件
不会共享状态变化

.completed:用于产生完成事件
.error:用于产生一个错误

public enum CompletableEvent {
    case error(Swift.Error)
    case completed
}

发出一个元素、或者一个 completed 事件、或者一个 error 事件
不会共享状态变化

.success:里包含该 Maybe 的一个元素值
.completed:用于产生完成事件
.error:用于产生一个错误

public enum MaybeEvent<Element> {
    case success(Element)
    case error(Swift.Error)
    case completed
}

不会产生 error 事件
一定在主线程监听(MainScheduler)
共享状态变化(shareReplayLatestWhileConnected)

为什么要使用 Driver?
(1)Driver 最常使用的场景应该就是需要用序列来驱动应用程序的情况了,比如:
通过 CoreData 模型驱动 UI
使用一个 UI 元素值(绑定)来驱动另一个 UI 元素值
(2)与普通的操作系统驱动程序一样,如果出现序列错误,应用程序将停止响应用户输入。
(3)在主线程上观察到这些元素也是极其重要的,因为 UI 元素和应用程序逻辑通常不是线程安全的。
(4)此外,使用构建 Driver 的可观察的序列,它是共享状态变化

不会产生 error 事件
一定在 MainScheduler 订阅(主线程订阅)
一定在 MainScheduler 监听(主线程监听)
共享状态变化

不会产生 error 事件
一定在 MainScheduler 订阅(主线程订阅)
一定在 MainScheduler 监听(主线程监听)
共享状态变化

import RxSwift
import UIKit
 
extension Reactive where Base: UIButton {
    public var tap: ControlEvent<Void> {
        return controlEvent(.touchUpInside)
    }
}

(2)RxSwift 内置了如下几种 Scheduler:

CurrentThreadScheduler:表示当前线程 Scheduler。(默认使用这个)
MainScheduler:表示主线程。如果我们需要执行一些和 UI 相关的任务,就需要切换到该 Scheduler 运行。
SerialDispatchQueueScheduler:封装了 GCD 的串行队列。如果我们需要执行一些串行任务,可以切换到这个 Scheduler 运行。
ConcurrentDispatchQueueScheduler:封装了 GCD 的并行队列。如果我们需要执行一些并发任务,可以切换到这个 Scheduler 运行。
OperationQueueScheduler:封装了 NSOperationQueue。

上一篇 下一篇

猜你喜欢

热点阅读