【发布时间】:2015-09-26 00:10:31
【问题描述】:
这是一个由两部分组成的问题,第一部分与此处的问题类似:Proper usage of the Alamofire's URLRequestConvertible。但我需要更多帮助!
1) 我是否要为模型层中的每个模型创建一个实现 URLRequestConvertible 的枚举路由器?
alamofire github 页面提供了我在此处复制的路由器示例:
enum Router: URLRequestConvertible {
static let baseURLString = "http://example.com"
static var OAuthToken: String?
case CreateUser([String: AnyObject])
case ReadUser(String)
case UpdateUser(String, [String: AnyObject])
case DestroyUser(String)
var method: Alamofire.Method {
switch self {
case .CreateUser:
return .POST
case .ReadUser:
return .GET
case .UpdateUser:
return .PUT
case .DestroyUser:
return .DELETE
}
}
var path: String {
switch self {
case .CreateUser:
return "/users"
case .ReadUser(let username):
return "/users/\(username)"
case .UpdateUser(let username, _):
return "/users/\(username)"
case .DestroyUser(let username):
return "/users/\(username)"
}
}
// MARK: URLRequestConvertible
var URLRequest: NSURLRequest {
let URL = NSURL(string: Router.baseURLString)!
let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
mutableURLRequest.HTTPMethod = method.rawValue
if let token = Router.OAuthToken {
mutableURLRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
}
switch self {
case .CreateUser(let parameters):
return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
case .UpdateUser(_, let parameters):
return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
default:
return mutableURLRequest
}
}
}
当我看到这个时(我是 swift 新手,所以请多多包涵>_
2) 当与 API 进行大量交互时,我习惯于创建一个“网络管理器”单例来抽象网络层并保存该 API 的标头和 baseurl。 alamofire 有一个此处描述的“经理”:
像 Alamofire.request 这样的顶级便捷方法使用 Alamofire.Manager 的共享实例,该实例使用默认的 NSURLSessionConfiguration 进行配置。因此,以下两个语句是等价的:
Alamofire.request(.GET, "http://httpbin.org/get")
let manager = Alamofire.Manager.sharedInstance
manager.request(NSURLRequest(URL: NSURL(string: "http://httpbin.org/get")))
我应该使用这个经理作为我的单身人士吗?如果是这样,我如何在管理器上设置 baseurl?另外,如果我使用这个管理器,它是否/可以与上面显示的路由器构造一起工作(每个模型对象设置它的 baseurl 和 NSURLRquest)?如果可以,你能提供一个简单的例子吗?
我是 Alamofire 库的新手,而且速度很快。所以,我知道我的理解有很多漏洞,但我只是想尽我所能去理解!任何信息都有帮助。谢谢。
【问题讨论】: