54 votes

Alamofire Swift 3.0 Argument supplémentaire dans l'appel

J'ai migré mon projet vers Swift 3 (et mis à jour Alamofire vers la dernière version de Swift 3 avec pod 'Alamofire', '~> 4.0' dans le fichier podfile).

Je reçois maintenant une erreur "Extra argument in call" sur chaque demande Alamofire. Par exemple:

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

Quelqu'un peut-il me dire pourquoi ?

78voto

Abdullah Md. Zubair Points 1998

Selon la documentation d' Alamofire pour la version 4.0.0, une requête d'URL avec une méthode HTTP serait la suivante:

 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)
 

Donc, votre demande d'URL sera:

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

et un exemple de demande sera:

 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
}
 

J'espère que cela t'aides!

72voto

Rajan Maheshwari Points 9586

Cette une a fonctionné pour moi.
Aucun besoin de retirer l'encodage paramètre

Swift 3.x / 4.x

Alamofire.request("https://yourServiceURL.com", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

        switch(response.result) {
        case .success(_):
            if let data = response.result.value{
                print(response.result.value)
            }
            break

        case .failure(_):
            print(response.result.error)
            break

        }
    }

et assurez-vous que les paramètres sont de type

[String:Any]?

Dans le cas de l' Obtenir

Alamofire.request("https://yourGetURL.com", method: .get, parameters: ["":""], encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

        switch(response.result) {
        case .success(_):
            if let data = response.result.value{
                print(response.result.value)
            }
            break

        case .failure(_):
            print(response.result.error)
            break

        }
    }

Fonctionne même avec

JSONEncoding.default 

Pour Les En-Têtes

Si vous êtes de passage en-têtes, assurez-vous de leur type devrait être [String:String]

Aller à travers l' Parameter Encoding Link https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#parameter-encoding-protocol

5voto

Post-méthode Alamofire 4.0 avec Swift 3.0 et xCode 8.0

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

4voto

xevser Points 31

Ma solution est que si vous utilisez des en-têtes, son type doit être [String: String].

1voto

Chi Minh Trinh Points 206

Je viens de résoudre le même problème que vous avez. Le problème est que j'ai importé Alamofire dans l'en-tête, je supprime donc simplement Alamofire lors d'une demande d'appel. Comme ça:

demande (.POST, patientIdUrl, paramètres: nil, en-tête: nil, encodage: .JSON)

J'espère que cela peut vous aider.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X