2016-09-22 2 views
1

Je suis en train de convertir en Swift 3.0, et j'ai une classe Router personnalisée pour Alamofire. Mon code est le suivant:Alamofire 4.0 Router Le type d'expression est ambigu sans plus de contexte

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 { 
    } 
} 

Cela me donne une erreur indiquant Type of expression is ambiguious without more context à Alamofire.URLEncoding(). Qu'est-ce que ça veut dire?

Dans les Alamofire docs à https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#parameter-encoding-protocol, ils ont le code

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

Répondre

0

Ceci est presque un double de How to migrate Alamofire router class to Swift 3? Check it out et vous verrez comment utiliser la nouvelle ParameterEncoding et surtout que URLRequestConvertible est maintenant mis en œuvre avec un func asURLRequest() throws -> URLRequest et non plus un var.

+0

Merci d'avoir implémenté le 'func' et non' var' m'a aidé. –