测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | MIT |
Released最新发布 | 2016年12月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Bruno Morgado 维护。
依赖 | |
RxSwift | ~> 3.0 |
RxCocoa | ~> 3.0 |
RxErrorTracker 提供了一种简洁、集成且易于使用的错误处理方法。它基于 RxSwift,并以 Rx 风格的观察序列形式表示错误序列。主要优势是允许有一个单一入口点来处理应用程序需要处理的多个错误。
您可以通过直接发射新错误或跟踪另一个观察序列的错误来将新错误推送到 RxErrorTracker 序列中。如果您使用过 RxSwift 的 ActivityIndicator,RxErrorTracker 将会令您感到熟悉。
您可以定义一个重置时间,在之后 RxErrorTracker 将发出 nil。
此外,一个 RxErrorTracker 可以通过一个重置信号初始化,这个信号将在每次产生新值时重置跟踪器。这对于绑定错误到特定上下文非常有用。比如说,一个在视图上下文中有意义但应在视图消失时被忽略的错误。(如果您使用 MVVM RxViewModel,这将是一个很好的补充功能)
let errorTracker = RxErrorTracker()
let disposeBag = DisposeBag()
let id: Int? = 1
guard let _id = id else {
errorTracker.onNext(Error.Internal)
return
}
fetchUserRequest(withId: _id)
.trackError(errorTracker, resetTime: 5)
.subscribe()
.addDisposableTo(disposeBag)
然后您可以观察 RxErrorTracker 并按需处理错误。
let errorBannerMessageUpdate = errorTracker
.map { error -> String in
guard let _error = error as? Error else {
return ""
}
return _error.description
}
let errorBannerVisibilityUpdate = errorTracker
.map { error -> Bool in
return error != nil
}
您可以在追踪错误时尽可能精细。对于更复杂的场景,您可以拥有多个 RxErrorTracker 并合并或组合它们来设置错误优先级。
let errorBannerStateUpdate = Driver.combineLatest(
noConnectionErrorTracker,
serverAPIErrorTracker,
internalErrorTracker) {($0, $1, $2)}
.map { (noConnectionError, serverError, internalError) -> ErrorBannerState in
// The order of the if clauses will define priorities
if noConnectionError != nil {return .NoConnectionErrorBannerState}
else if serverError != nil {return .ServerErrorBannerState(error: serverError)}
else if internalError != nil {return .InternalErrorBannerState}
}
}
要运行示例项目,首先克隆仓库,然后从 Example 目录运行 pod install
。
RxErrorTracker 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:
pod "RxErrorTracker"
Bruno Morgado,[email protected]
RxErrorTracker 遵循 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。