ios - 如何编写 PrimitiveSequence 扩展名包括 <T : Codable>

标签 ios swift rx-swift moya

我用 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/

相关文章:

ios - 使用 FFMPEG 编码 iOS 兼容的 h264 音频流

ios - 检测相机何时自动对焦

ios - 为什么从后台线程更新 UI 需要这么长时间?

ios - 以编程方式调用已设置的 UIBarButtonItem 操作

ios - 使用 RxSwift 创建一个 "reactive"API

ios - 如何让 Facebook 提及,例如在 UITextView 中突出显示单词?

swift - 如何将额外参数传递给自定义 UIView 类以在 swift 中进行初始化

swift - 如何使用 Alamofire 保存和加载复选框

ios - 无法使用参数列表 ((ErrorType)、XMPPError) 调用 'XCTAssertEqual'

swift - 使用 RxSwift 扩展目标- Action 方法