gpt4 book ai didi

ios - 是否可以使用 RxSwift 和 Moya 映射到 "fallback"Decodable?

转载 作者:行者123 更新时间:2023-11-28 23:51:32 24 4
gpt4 key购买 nike

我在我的应用程序的网络层使用 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 提供替代映射模型吗?

最佳答案

您可以使用 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 是不正确的。

关于ios - 是否可以使用 RxSwift 和 Moya 映射到 "fallback"Decodable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51965193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com