RxOptional
为 Swift 的可选项和 "Occupiable" 类型扩展的 RxSwift。
使用方法
除非特别说明,所有操作符也适用于 Driver
和 Signal
。
可选项操作符
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>>)
当空时捕获
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
运行示例.playground
- 在示例目录中运行
pod install
- 选择 RxOptional 示例目标
- 构建
- 显示调试区域(cmd+shift+Y)
- 在调试区域中单击蓝色播放按钮
要求
安装
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,[email protected]
许可证
RxOptional在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。