Alamofire Swift 3.0 Argumento extra na chamada

Eu migrei meu projeto para o Swift 3 (e atualizei o Alamofire para a última versão do Swift 3 com o pod 'Alamofire', '~> 4.0' no Podfile).

Agora recebo um erro “Argumento extra em chamada” em todos os pedidos do Alamofire.request. Por exemplo:

 let patientIdUrl = baseUrl + nextPatientIdUrl Alamofire.request(.POST, patientIdUrl, parameters: nil, headers: nil, encoding: .JSON) 

Alguém pode me dizer por quê?

De acordo com a documentação do Alamofire para a versão 4.0.0, o pedido de URL com o método HTTP seria o seguinte:

 Alamofire.request("https://httpbin.org/get") // method defaults to `.get` Alamofire.request("https://httpbin.org/post", method: .post) Alamofire.request("https://httpbin.org/put", method: .put) Alamofire.request("https://httpbin.org/delete", method: .delete) 

Então, seu pedido de URL será:

 Alamofire.request(patientIdUrl, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil) 

e uma solicitação de amostra será:

 Alamofire.request(url, method: .post, parameters: param, encoding: JSONEncoding.default, headers: [AUTH_TOKEN_KEY : AUTH_TOKEN]) .responseJSON { response in print(response.request as Any) // original URL request print(response.response as Any) // URL response print(response.result.value as Any) // result of response serialization } 

Espero que isto ajude!

Este trabalhou para mim.
Não há necessidade de remover o parâmetro de codificação

Swift 3.x / 4.x

 Alamofire.request("https://yourServiceURL.com", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse) in switch(response.result) { case .success(_): if let data = response.result.value{ print(response.result.value) } break case .failure(_): print(response.result.error) break } } 

e certifique-se de que os parâmetros são do tipo

 [String:Any]? 

Em caso de obter

 Alamofire.request("https://yourGetURL.com", method: .get, parameters: ["":""], encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse) in switch(response.result) { case .success(_): if let data = response.result.value{ print(response.result.value) } break case .failure(_): print(response.result.error) break } } 

Até trabalha com

 JSONEncoding.default 

Para headers

Se você estiver passando headers, verifique se o tipo deles deve ser [String:String]

Acesse o Parameter Encoding Link https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#parameter-encoding-protocol

Post method Alamofire 4.0 com Swift 3.0 e xCode 8.0

 Alamofire.request(URL, method: .post, parameters: PARAMS) .responseJSON { closureResponse in if String(describing: closureResponse.result) == "SUCCESS" { // Sucess code } else { // Failure Code } } 

Minha solução é se você estiver usando headers, seu tipo deve ser [String: String].

Acabei de resolver o mesmo problema que você. O problema é que eu importei o Alamofire no header, então eu apenas removi o Alamofire quando solicitei uma chamada. Curtiu isso:

request (.POST, patientIdUrl, parâmetros: nil, headers: nil, codificação: .JSON)

Eu espero que isso possa te ajudar.

Este erro está no valor dos parâmetros. Tem que ser [String: String]

 let url = URL(string: "http://yourURLhere")! let params: [String: String] = ["name": "oskarko", "email": "youremail@here.com", "sex": "male"] Alamofire.request(url, method: .post, parameters: params, encoding: URLEncoding.default, headers: nil).validate(statusCode: 200..<600).responseJSON() { response in switch response.result { case .success: var result = [String:String]() if let value = response.result.value { let json = JSON(value) } case .failure(let error): print("RESPONSE ERROR: \(error)") } } 

Eu corri para este mesmo argumento extra ‘método’ no erro de chamada quando minha variável de URL estava fora do escopo .

No seu caso, certifique-se de que baseUrl e nextPatientIdUrl estejam no escopo quando eles estiverem sendo usados.

Espero que isso resolva seu problema. Te agradece!

Para mim isso está funcionando.

Para solicitação GET

 Alamofire.request("http://jsonplaceholder.typicode.com/todos/1/get").responseJSON { (response:DataResponse) in switch(response.result) { case .success(_): if response.result.value != nil{ print(response.result.value!) } break case .failure(_): print(response.result.error) break } } 

Para o POST

 let parameters = NSDictionary(object: "nara", forKey: "simha" as NSCopying) Alamofire.request("http://jsonplaceholder.typicode.com/posts", method: HTTPMethod.post, parameters: parameters as? Parameters, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse) in switch(response.result) { case .success(_): if response.result.value != nil{ print(response.result.value!) } break case .failure(_): print(response.result.error) break } } 

Obrigado @ Rajan Maheswari .

Eu consertei esse problema com:

  1. Reordenar parâmetros (url e tipo de método).
  2. Altere Codificação Enum para ser “JSONEncoding.default” por exemplo.

Observe que: alteração de assinatura dos methods Alamofire no Swift 3

Duas coisas que achei dignas de nota.

  1. Remova o primeiro label de URL antes de seu valor. Use Alamofire.request("https://yourServiceURL.com", method: .post, vez de Alamofire.request(url: "https://yourServiceURL.com", method: .post, ,.
  2. Certifique-se de que o tipo de dados dos parâmetros seja [String: String] . Declará-lo explicitamente.

Eu copio este código do Alamofire, crio um URLRequest e uso o método Alamofire.request (URLRequest), evito esse erro

 originalRequest = try URLRequest(url: url, method: method, headers: headers) let encodedURLRequest = try encoding.encode(originalRequest!, with: parameters) 

Eu consertei este problema desta maneira:

Basta remover parâmetros extras, apenas parameters , encoding e headers , se esses parâmetros forem nulos, você pode remover e deixar assim,

 Alamofire.request(yourURLString, method: .post) 
 func API() { if Reachability.isConnectedToNetwork() { let headers = ["Vauthtoken":"Bearer \(apiToken)"] print(headers) // let parameter = ["iLimit":"10","iOffset":"0","iThreadId":"1"] ApiUtillity.sharedInstance.showSVProgressHUD(text: "Loding...") Alamofire.request(ApiUtillity.sharedInstance.API(Join: "vehicle/CurrentVehicleLists"), method:.get, parameters:nil, headers: headers).responseJSON { response in switch response.result { case .success: print(response) ApiUtillity.sharedInstance.dismissSVProgressHUD() let dictVal = response.result.value let dictMain:NSDictionary = dictVal as! NSDictionary let statusCode = dictMain.value(forKey: "status") as! Int if(statusCode == 200) { } else if statusCode == 401 { } else { } case .failure(let error): print(error) ApiUtillity.sharedInstance.dismissSVProgressHUD() } } } else { ApiUtillity.sharedInstance.dismissSVProgressHUD() ApiUtillity.sharedInstance.showErrorMessage(Title: "Internet Connection", SubTitle: "Internet connection Faild", ForNavigation: self.navigationController!) } } 

Se você adicionou arquivos Alamofire localmente, não use “Alamofire” antes de solicitar

 let apipath = “your api URL” request(apipath, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON { response in switch(response.result) { case .success(_): do { let JSON = try JSONSerialization.jsonObject(with: response.data! as Data, options:JSONSerialization.ReadingOptions(rawValue: 0)) guard let JSONDictionary: NSDictionary = JSON as? NSDictionary else { print("Not a Dictionary") return } print("Post Response : \(JSONDictionary)") } catch let JSONError as NSError { print("\(JSONError)") } break case .failure(_): print("failure Http: \(String(describing: response.result.error?.localizedDescription))") break } } 
    Intereting Posts