是否可以使用 RxSwift 映射错误类型?
例如,我有一个像这样的辅助函数:
enum InternalError: Error {
case fooError
case barError
}
private func helper() -> Observable<MyData> {
// ...
}
enum ServiceError: Error {
case fatalError(message: String)
case warning(message: String)
}
Run Code Online (Sandbox Code Playgroud)
我希望我们可以这样做,请注意以下内容mapError不存在:
func getData() -> Observable<MyData> {
helper().mapError({ error: InternalError -> ServiceError
switch error {
case .fooError:
return ServiceError.fatalError(message: "This is bad.")
case .barError:
return ServiceError.warning(message: "Be careful.")
}
})
}
Run Code Online (Sandbox Code Playgroud)
是否可以?或者总体来说这是一个坏主意?
您在问题中描述的内容不可能通过返回错误来完成,因为函数的返回类型是Observable<MyData>. 有两种解决方案:
您可以定义一个enum Result<T>with.success(T)和.error(Swift.Error)returnObservable<Result<MyData>>来处理错误,如下所示:
helper().catchError{ error in
guard let error = error as? InternalError else { throw UnknownError() }
switch error {
case .fooError:
return Observable.just(
Result.error(
ServiceError.fatalError(message: "This is bad.")
)
)
case .barError:
return Observable.just(
Result.error(
ServiceError.warning(message: "Be careful.")
)
)
}
}
Run Code Online (Sandbox Code Playgroud)
或者你可以简单地用return Observable...a替换来重新抛出throw,我个人认为这比开销更好Result<T>。
| 归档时间: |
|
| 查看次数: |
2736 次 |
| 最近记录: |