Alamofire 4.0路由器表达式类型不明确,没有更多上下文

时间:2016-09-22 19:37:54

标签: ios swift alamofire nsurlrequest

我正在转换为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-protocolAlamofire个文档中,他们有代码

public protocol ParameterEncoding {
    func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest
}

1 个答案:

答案 0 :(得分:0)

这几乎是How to migrate Alamofire router class to Swift 3?的副本 检查一下,您就会看到如何使用新的ParameterEncoding,尤其是URLRequestConvertible现在已经使用func asURLRequest() throws -> URLRequest而不是var来实现。