如何减少responseJSON中的样板,就像我使用URLRequestConvertible对相关的Web调用进行分组

时间:2017-05-05 03:17:35

标签: ios json swift alamofire

我使用URLRequestConvertible对我的网络调用进行分组,并减少样板代码。但是在每个responseJSON中我仍然有样板来处理我的JSON响应。它们看起来都像这些,

  1. 检查response.result.isSuccess
  2. 检查response.result.value为?我期望的类型数据(主要是字典)
  3. 检查词典中的成功指标
  4. 如果成功,则检索我需要的数据。
  5. 因为我将相关的调用分组到一个URLRequestConvertible中,所以他们的响应格式与我实际上第五步的格式相似,以便进一步检索我正在寻找的“真实”数据。

    那么有没有办法在responseJSON中减少这些样板代码?

    顺便说一句,我实际上为它提出了一个kludge解决方案。但我想知道有什么常见的做法吗?

1 个答案:

答案 0 :(得分:0)

我在alamofire forum #2099处提出了同样的问题并得到了使用 ResponseSerializer

的答案

但是在检查了ResponseSerializer文档后,我意识到我的自制解决方案并不像我想象的那样糟糕(使用ResponseSerializer看起来相当复杂)

所以我的解决方案是向我的路由器添加一个静态验证方法,让它进行基本的验证工作(从第1步到第5步)

static func verify(json:DataResponse<Any>, request:Router) -> result //needs the 2nd
parameter b/c is a static method

现在我的调用方法改为这些,

var result = CallResult.fail
Alamofire.request(Router.Callback(input))
         .responseJSON { response in
            result = Router.verify(json:response,request:Router.Callback(input))
         }
         .responseJSON { _ in //AS I already parsed response into my result
            //process the result now
         }