RxOptional

CircleCI Version License Platform

用于 Swift 可选项(Optionals)和“可占据(Occupiable)”类型的 RxSwift 扩展。

用法

除非另有说明,所有操作符在 DriverSignal 上也可用。

可选项操作符

filterNil
Observable<String?>
    .of("One", nil, "Three")
    .filterNil()
    // Type is now Observable<String>
    .subscribe { print($0) }
next(One)
next(Three)
completed
replaceNilWith
Observable<String?>
    .of("One", nil, "Three")
    .replaceNilWith("Two")
    // Type is now Observable<String>
    .subscribe { print($0) }
next(One)
next(Two)
next(Three)
completed
errorOnNil

Driver 上不可用,因为 Driver 不会抛出错误。

默认情况下,使用 RxOptionalError.foundNilWhileUnwrappingOptional 抛出错误。

Observable<String?>
    .of("One", nil, "Three")
    .errorOnNil()
    // Type is now Observable<String>
    .subscribe { print($0) }
next(One)
error(Found nil while trying to unwrap type <Optional<String>>)
catchOnNil
Observable<String?>
    .of("One", nil, "Three")
    .catchOnNil {
        return Observable<String>.just("A String from a new Observable")
    }
    // Type is now Observable<String>
    .subscribe { print($0) }
next(One)
next(A String from a new Observable)
next(Three)
completed
distinctUntilChanged
Observable<Int?>
    .of(5, 6, 6, nil, nil, 3)
    .distinctUntilChanged()
    .subscribe { print($0) }
next(Optional(5))
next(Optional(6))
next(nil)
next(Optional(3))
completed

可占据操作符

可占据类型包括:

目前在 Swift 中,协议无法扩展以符合其他协议。现在,上面列出的类型符合 Occupiable。您也可以使自定义类型符合 Occupiable

filterEmpty
Observable<[String]>
    .of(["Single Element"], [], ["Two", "Elements"])
    .filterEmpty()
    .subscribe { print($0) }
next(["Single Element"])
next(["Two", "Elements"])
completed
errorOnEmpty

Driver 上不可用,因为 Driver 不会抛出错误。

默认情况下,使用 RxOptionalError.emptyOccupiable 抛出错误。

Observable<[String]>
    .of(["Single Element"], [], ["Two", "Elements"])
    .errorOnEmpty()
    .subscribe { print($0) }
next(["Single Element"])
error(Empty occupiable of type <Array<String>>)
catchOnEmpty
Observable<[String]>
    .of(["Single Element"], [], ["Two", "Elements"])
    .catchOnEmpty {
        return Observable<[String]>.just(["Not Empty"])
    }
    .subscribe { print($0) }
next(["Single Element"])
next(["Not Empty"])
next(["Two", "Elements"])
completed

运行 Examples.playground

要求

安装

CocoaPods

RxOptional 通过 CocoaPods 提供。 要安装它,只需将以下行添加到您的 Podfile 中

pod 'RxOptional'

Carthage

将其添加到 Cartfile

github "RxSwiftCommunity/RxOptional" ~> 4.1.0
$ carthage update

Swift Package Manager

要将 RxOptional 用作 Swift Package Manager 包,只需在您的 Package.swift 文件中添加以下内容。

import PackageDescription

let package = Package(
    name: "ProjectName",
    dependencies: [
        .Package(url: "https://github.com/RxSwiftCommunity/RxOptional")
    ]
)

作者

Thane Gill

许可证

RxOptional 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE 文件。