我用 Moya 和 RxSwift
编写网络层,服务器响应 JSON 如下:
{ "code": 200, "msg": "", data: {}}
我只想在成功时返回数据,代码等于 200,如果代码不等于 200 则返回错误,我该怎么办?
我试着写这样的代码
extension PrimitiveSequence where TraitType == SingleTrait, ElementType == BaseBean<T: Codable>
这是响应对象的代码:
struct BaseBean<T: Codable> : Codable {
let code: Int
let msg: String
let data: T?
func map() throws -> T {
if code != 200 {
throw ApiError(reason: msg)
}
if data == nil {
throw ApiError(reason: "Empty Data")
}
return data!
}
}
我期待这样的调用方式
static func userInfo(params: UserInfoParams) -> Single<UserInfo> {
return provider.rx.request(.userInfo(params: params)).map(BaseBean<UserInfo>).map()
}
最佳答案
试试这个。
func userInfo(params: UserInfoParams) -> Single<UserInfo> {
return provider.rx.request(.userInfo(params: params))
.map(BaseBean<UserInfo>)
.map { $0.map() }
}
我认为您不应该将您的函数命名为map()
,最好是类似于validatedData()
。
关于ios - 如何编写 PrimitiveSequence 扩展名包括 <T : Codable>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56529946/