代码之家  ›  专栏  ›  技术社区  ›  phi

是否可以使用RxSwift和Moya映射到“回退”可解码?

  •  0
  • phi  · 技术社区  · 8 年前

    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提供一个替代的映射模型吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   phi    8 年前

    你可以用 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!")
            }
         }
    

    推荐文章