我正在转换为Swift 3.0
,并为Router
设置了自定义Alamofire
课程。我的代码如下:
enum Router: URLRequestConvertible {
case get(query: String, params: [String: AnyObject]?)
case post(query: String, params: [String: AnyObject]?)
case put(query: String, params: [String: AnyObject]?)
case delete(query: String, params: [String: AnyObject]?)
var urlRequest: NSMutableURLRequest {
// Default to GET
var httpMethod: HTTPMethod = .get
let (path, parameters): (String, [String: AnyObject]?) = {
switch self {
case .get(let query, let params):
// Set the request call
httpMethod = .get
// Return the query
return (query, params)
case .post(let query, let params):
// Set the request call
httpMethod = .post
// Return the query
return (query, params)
case .put(let query, let params):
// Set the request call
httpMethod = .put
// Return the query
return (query, params)
case .delete(let query, let params):
// Set the request call
httpMethod = .delete
// Return the query
return (query, params)
}
}()
// Create the URL Request
let urlRequest: NSMutableURLRequest
if let url = URL(string: Globals.BASE_URL + path) {
urlRequest = NSMutableURLRequest(url: url)
} else {
urlRequest = NSMutableURLRequest()
}
// set header fields
if let key = UserDefaults.standard.string(forKey: Globals.NS_KEY_SESSION) {
urlRequest.setValue(key, forHTTPHeaderField: "X-XX-API")
}
// Add user agent
if let userAgent = UserDefaults.standard.string(forKey: Globals.NS_KEY_USER_AGENT) {
urlRequest.setValue(userAgent, forHTTPHeaderField: "User-Agent")
}
// Set the HTTP method
urlRequest.httpMethod = httpMethod.rawValue
// Set timeout interval to 20 seconds
urlRequest.timeoutInterval = 20
return Alamofire.URLEncoding().encode(urlRequest as! URLRequestConvertible, with: parameters)
}
func asURLRequest() throws -> URLRequest {
}
}
这给我一个错误,指出Type of expression is ambiguious without more context
Alamofire.URLEncoding()
。这是什么意思?
在https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#parameter-encoding-protocol的Alamofire
个文档中,他们有代码
public protocol ParameterEncoding {
func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest
}
答案 0 :(得分:0)
这几乎是How to migrate Alamofire router class to Swift 3?的副本
检查一下,您就会看到如何使用新的ParameterEncoding
,尤其是URLRequestConvertible
现在已经使用func asURLRequest() throws -> URLRequest
而不是var
来实现。