是否可以使用RxSwift映射错误类型?
例如,我有一个这样的辅助函数:
enum InternalError: Error {
case fooError
case barError
}
private func helper() -> Observable<MyData> {
// ...
}
enum ServiceError: Error {
case fatalError(message: String)
case warning(message: String)
}
我希望我们可以这样做,注意以下 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.")
}
})
}
可能吗?或者一般来说这是个坏主意吗?
1 回答
由于函数的返回类型是
Observable<MyData>
,因此您在问题中描述的问题无法通过 returning 错误执行 . 有两种解决方案:您可以使用
.success(T)
和.error(Swift.Error)
定义enum Result<T>
并返回Observable<Result<MyData>>
,您可以按如下方式处理错误:或者你可以简单地通过用
throw
代替return Observable...
来重新抛出,我个人认为这比Result<T>
开销更好 .