Before:
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
.responseJSON { response in
// 1. Validate
if response.result.isSuccess {
// 2. Parse JSON data
let object = JSONParseor(response.result.value)
print(object)
} else {
// handle failure data
}
}
Alfter:
APIClient.events(arg1, arg2: arg2) { (result) in
switch result {
case let .Success(value):
print(value)
case let .Failure(status, description):
print("status: \(status); description: \(description)")
}
}
代码说明:
一、通过 enum 将 request 拆分了成了四个模块 1. Endpoint 2. Path 3. Method 4. Parameters
二、通过 _request() 方法再次将 1. Endpoint 2. Path 3. Method 4. parameters 重组成一个 request
三、通过 Result 区分 Success 和 Failure 是回调方法中减少 if ... else 的嵌套,逻辑更加清晰
四、利用 Generic 和 Protocol 在 _request() 方法中统一解析 JSON data (只要对象遵循 JSONAbleType )
这样做的好处:
有利与 RESTFul API 的业务逻辑编写
所有接口通是过了一道 _request(),可以在这里做一些通用的逻辑处理
最终的请求回调中以然不需要去处理 JSON data 的解析,返回的是一个直接可用的 model 对象