ios - 如何编写 PrimitiveSequence 扩展包括
问题描述
RxSwift
我用 Moya 和服务器响应 JSON编写网络层,如下所示:
{ "code": 200, "msg": "", data: {}}
我只想在代码 eques 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()
.
推荐阅读
- javascript - javascript树向特定级别的对象添加新属性
- sql - Oracle SQL 分区范围全部而不是范围单一
- visual-studio - 如何从 Visual Studio 2019 源代码管理身份验证窗口中删除帐户?
- javascript - 获取数值最大的输入元素的输入id
- python - 如何更新通过外键连接的模型中的字段
- c - 将 %d 与 char 一起使用,意外结果
- java - 从 Android Studio 中的不同活动访问布局
- javascript - 用于文本过滤器的 Ag-grid 空白单元格设置
- python - 在 QTableWidget 中搜索
- php - 将 PHP 升级到 8.0 后如何修复 laravel/ui 错误以升级 Laravel