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 |