如何减少 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 调用进行分组一样的主要内容,如果未能解决你的问题,请参考以下文章
csharp 可绑定类减少mvvm中的样板代码(实现INotifyPropertyChanged)