【发布时间】:2017-07-10 23:34:11
【问题描述】:
这是一个 Alamofire 路由器的示例
import Foundation
import Alamofire
enum PostRouter: URLRequestConvertible {
static let baseURLString = "http://jsonplaceholder.typicode.com/"
case Get(Int)
case Create([String: AnyObject])
case Delete(Int)
var URLRequest: NSMutableURLRequest {
var method: Alamofire.Method {
switch self {
case .Get:
return .GET
case .Create:
return .POST
case .Delete:
return .DELETE
}
}
let params: ([String: AnyObject]?) = {
switch self {
case .Get, .Delete:
return (nil)
case .Create(let newPost):
return (newPost)
}
}()
let url:NSURL = {
// build up and return the URL for each endpoint
let relativePath:String?
switch self {
case .Get(let postNumber):
relativePath = "posts/\(postNumber)"
case .Create:
relativePath = "posts"
case .Delete(let postNumber):
relativePath = "posts/\(postNumber)"
}
var URL = NSURL(string: PostRouter.baseURLString)!
if let relativePath = relativePath {
URL = URL.URLByAppendingPathComponent(relativePath)
}
return URL
}()
let URLRequest = NSMutableURLRequest(URL: url)
let encoding = Alamofire.ParameterEncoding.JSON
let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params)
encodedRequest.HTTPMethod = method.rawValue
return encodedRequest
}
}
这基本上是创建、删除或获取帖子。对于执行此操作的简单应用程序,此代码看起来很干净。拥有大量端点和模型的应用程序呢?假设我们必须对用户、公司、付款、评论、渠道等实体进行不同的操作。我说的是大量的端点和方法。
在这种情况下,是否有必要为每个端点创建一个路由器?感觉不对,对所有这些端点使用相同的路由器类是一个好习惯吗?
这里也有人问过类似的问题:Proper usage of the Alamofire's URLRequestConvertible
但我仍然对上述问题的答案不满意,因为接受的答案建议对所有端点使用相同的路由器。这里的最佳做法是什么?
【问题讨论】:
-
我希望一年后你能找到答案……你想到了什么?你能分享一下这个问题的答案吗?我相信很多人都会从中受益......
标签: ios swift design-patterns swift3 alamofire