我正在将RxMoya用于我的应用程序的网络层,并且遇到服务器可以发送预期的响应(假设为User
)或错误对象(均带有状态代码)的情况200.例如:
{
"name": "john doe",
"username": "john_doe"
}
可能是预期的响应,并且
{
"error": {
"code": 100,
"message": "something went wrong™"
}
}
可能是错误。
网络适配器的相关部分可能如下所示:
return provider
.rx
.request(MultiTarget.target(target))
.map(User.self)
// if above fails, try:
// .map(UserError.self)
.asObservable()
是否有一种方法可以首先尝试和.map(User.self)
,如果失败,请尝试在同一操作链中进行.map(UserError.self)
?换句话说,我可以使用Rx提供替代的映射模型吗?
答案 0 :(得分:1)
您可以使用flatMap
来做到这一点。像这样:
return provider
.rx
.request(MultiTarget.target(target))
.flatMap { response -> Single<User> in
if let responseType = try? response.map(User.self) {
return Single.just(responseType)
} else if let errorType = try? response.map(UserError.self) {
return Single.error(errorType.error)
} else {
fatalError("⛔️ We don't know how to parse that!")
}
}
顺便说一句,返回错误的状态码200不正确。