,ios,swift,rx-swift,moya"/>

首页 > 解决方案 > 如何编写 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()
    }

标签: iosswiftrx-swiftmoya

解决方案


试试这个。

func userInfo(params: UserInfoParams) -> Single<UserInfo> {
    return provider.rx.request(.userInfo(params: params))
        .map(BaseBean<UserInfo>)
        .map { $0.map() }
    }

我不认为你应该命名你的函数map(),最好是validatedData().


推荐阅读