zoukankan      html  css  js  c++  java
  • Completable

    Completable

    Completable 是 Observable 的特殊版本 不像 Observable 可以发出多个元素,它要么只能产生一个 completed 事件,要么产生一个 error 事件。

    • 发出零个元素
    • 发出一个 completed 事件或者一个 error 事件
    • 不会共享附加作用

    Completable 适用于那种只关心任务是否完成,而不需要在意任务返回值的情况。它和 Observable 有点相似。

    • 如何创建 Completable

    创建 Completable 和创建 Observable 非常相似:

    func cacheLocally() -> Completable {
        return Completable.create { completable in
           // Store some data locally
           ...
           ...
    
           guard success else {
               completable(.error(CacheError.failedCaching))
               return Disposables.create {}
           }
    
           completable(.completed)
           return Disposables.create {}
        }
    }
    

    可以这样使用 Completable:

    cacheLocally()
        .subscribe(onCompleted: {
            print("Completed with no error")
        }, onError: { error in
            print("Completed with an error: (error.localizedDescription)")
         })
        .disposed(by: disposeBag)

    也可以使用这样调用

    以使用如下方式使用这个 Completable:
    
    cacheLocally()
        .subscribe { completable in
            switch completable {
            case .completed:
                print("保存成功!")
            case .error(let error):
                print("保存失败: (error.localizedDescription)")
            }
        }
        .disposed(by: disposeBag)

    订阅提供一个 CompletableEvent 的枚举:

    public enum CompletableEvent {
        case error(Swift.Error)
        case completed
    }
    
    • completed - 产生完成事件
    • error - 产生一个错误

    Maybe

    Maybe 是 Observable 的特殊版本。它介于 Single 和 Completable 之间,它要么只能发出一个元素,要么产生一个 completed 事件,要么产生一个 error 事件

    • 发出一个元素或者一个 completed 事件或者一个 error 事件
    • 不会共享附加作用

    如果遇到那种可能需要发出一个元素,又可能不需要发出时,就可以使用 Maybe。

    • 如何创建 Maybe 创建 Maybe 和创建 Observable 非常相似:
    func generateString() -> Maybe<String> {
        return Maybe<String>.create { maybe in
            maybe(.success("RxSwift"))
    
            // OR
    
            maybe(.completed)
    
            // OR
    
            maybe(.error(error))
    
            return Disposables.create {}
        }
    }

    可以这样使用 Maybe:

    generateString()
        .subscribe(onSuccess: { element in
            print("Completed with element (element)")
        }, onError: { error in
            print("Completed with an error (error.localizedDescription)")
        }, onCompleted: {
            print("Completed with no element")
        })
        .disposed(by: disposeBag)

    同样可以对 Observable 调用 .asMaybe() 方法,将它转换为 Maybe。

  • 相关阅读:
    沁恒 CH559 芯片入门指南
    雕刻机制作 PCB 指南
    我的 FPGA 学习历程(14)—— PWM 脉冲宽度调制
    我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装
    我的 FPGA 学习历程(13)—— 电子钟项目
    我的 FPGA 学习历程(12)—— 电子钟项目准备
    我的 FPGA 学习历程(11)—— 实验:按键消抖
    我的 FPGA 学习历程(10)—— 实验:数码管驱动
    我的 FPGA 学习历程(09)—— 时序逻辑入门
    我的 FPGA 学习历程(08)—— 实验:点亮单个数码管
  • 原文地址:https://www.cnblogs.com/liuxiaokun/p/12682214.html
Copyright © 2011-2022 走看看