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 对象
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.