用于 Swift 可选项(Optionals)和“可占据(Occupiable)”类型的 RxSwift 扩展。
除非另有说明,所有操作符在 Driver
和 Signal
上也可用。
Observable<String?>
.of("One", nil, "Three")
.filterNil()
// Type is now Observable<String>
.subscribe { print($0) }
next(One)
next(Three)
completed
Observable<String?>
.of("One", nil, "Three")
.replaceNilWith("Two")
// Type is now Observable<String>
.subscribe { print($0) }
next(One)
next(Two)
next(Three)
completed
在 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>>)
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
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
可占据类型包括:
String
Array
Dictionary
Set
目前在 Swift 中,协议无法扩展以符合其他协议。现在,上面列出的类型符合 Occupiable
。您也可以使自定义类型符合 Occupiable
。
Observable<[String]>
.of(["Single Element"], [], ["Two", "Elements"])
.filterEmpty()
.subscribe { print($0) }
next(["Single Element"])
next(["Two", "Elements"])
completed
在 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
pod install
RxOptional 通过 CocoaPods 提供。 要安装它,只需将以下行添加到您的 Podfile 中
pod 'RxOptional'
将其添加到 Cartfile
github "RxSwiftCommunity/RxOptional" ~> 4.1.0
$ carthage update
要将 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 文件。