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

Posted

技术标签:

【中文标题】如何减少 responseJSON 中的样板,就像我使用 URLRequestConvertible 对相关的 Web 调用进行分组一样【英文标题】:How to reduce boilerplate in responseJSON just like I use URLRequestConvertible to group related web calls 【发布时间】:2017-05-05 03:17:34 【问题描述】:

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

    检查 response.result.isSuccess 检查 response.result.value 为?我期望的类型数据(主要是字典) 检查字典中的成功指示器 如果成功则检索我需要的数据。

因为我将相关调用分组到一个 URLRequestConvertible 中,所以它们的响应具有相似的格式,我实际上有第 5 步来进一步检索我正在寻找的“真实”数据。

那么有什么办法可以减少 responseJSON 中的这些样板代码?

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

【问题讨论】:

【参考方案1】:

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

的答案

但是在查看了 ResponseSerializer 文档后,我意识到我的自制解决方案并没有我想象的那么糟糕(使用 ResponseSerializer 似乎相当复杂)

所以我的解决方案是给我的Router添加一个静态验证方法,让它做基本的验证工作(从步骤#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
         

【讨论】:

以上是关于如何减少 responseJSON 中的样板,就像我使用 URLRequestConvertible 对相关的 Web 调用进行分组一样的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Hive MACRO 减少样板文件

csharp 可绑定类减少mvvm中的样板代码(实现INotifyPropertyChanged)

创建 Oracle 函数 - 如何减少样板代码

将 responseJSON 解析为 ObjectMapper

减少 redux-thunk 样板

Java编程技巧之样板代码