https://github.com/alfredcc/Archi
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 对象
1
kouryu 2016-09-21 10:45:31 +08:00 via iPhone
这不是 Moya 干的事情么,
|
2
jinzhe 2016-09-21 11:15:06 +08:00
swift 闭包真心不喜欢,感觉乱
|
3
plqws 2016-09-21 11:22:15 +08:00
还是用 promise 好
|
4
myrual 2016-09-21 11:32:26 +08:00
感觉过度设计。
在第三方库的基础上做一个库对自己是一个很好的提高。 |
5
racechao OP |
6
itoolset 2016-09-21 23:07:51 +08:00
我觉得还不如猫大的 Demo 好。。
https://github.com/MDCC2016/ProtocolNetwork |