Ios 是否有可能映射到“a”;“撤退”;使用RxSwift和Moya可解码?
我将RxMoya用于我的应用程序的网络层,服务器可以发送预期的响应(比如Ios 是否有可能映射到“a”;“撤退”;使用RxSwift和Moya可解码?,ios,rx-swift,rx-cocoa,moya,Ios,Rx Swift,Rx Cocoa,Moya,我将RxMoya用于我的应用程序的网络层,服务器可以发送预期的响应(比如用户),也可以发送错误对象,两者的状态代码都是200。例如: { "name": "john doe", "username": "john_doe" } 可能是预期的反应和 { "error": { "code": 100, "message": "something went wrong™" } } 可能是错误 网络适配器的相关部分可能如下所示: return provider
用户
),也可以发送错误对象,两者的状态代码都是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提供一个替代的映射模型吗?您可以使用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!")
}
}
返回提供程序
.rx
.request(多目标.target(目标))
.flatMap{response->Single-in
如果let responseType=try?response.map(User.self){
返回单身。仅(responseType)
}如果let errorType=try?response.map(UserError.self),则为else{
返回Single.error(errorType.error)
}否则{
法塔莱罗(“⛔️ 我们不知道如何解析它!)
}
}
顺便说一句,返回错误的状态代码200是不正确的。对不起,不知怎么的,我错过了你的答案。问题是,我想在第一种情况下返回
Single.just(user)
,在第二种情况下返回Single.error(errorMessage)
。在您的代码中,如果让user=user.self,行做什么?好的,明白了。因为你应该得到分数,所以我在接受你的答案之前先对你的答案做了一些修改。谢谢好的,我认为User.self
是可选的,并且使用if let
进行展开。但是可以,您可以返回Single.just(user)
和Single.error
,但是错误应该有error
对象,而不是字符串。此外,如果flatMap
的返回类型为Single
,则可以直接键入。just(user)
和。error(error)