Obtenir une erreur lors de l'appel de la méthode de requête Alamofire dans la dernière version (4.0.0).
La syntaxe est la suivante:
Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: .JSON, headers: [:])
le type de requestParam est [String: Any].
J'ai eu le problème, je dois utiliser JSONEncoding.default au lieu de .JSON, donc la nouvelle syntaxe est
Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: JSONEncoding.default, headers: [:])
Je ne peux que vous diriger vers: https://github.com/Alamofire/Alamofire/issues/1508#issuecomment-246207682
Fondamentalement, si l’un de vos paramètres est de type incorrect, le compilateur Swift supposera que vous utilisez request(urlRequest:URLRequestConvertible)
]), puis le method
est un extra argument
Repassez ces paramètres à nouveau et assurez-vous que tout est de type correct (Parameters?
, ParameterEncoding
et HTTPHeaders
)
J'avais le même problème, le problème est de type paramètres, il devrait être de type [String: Any]. Après avoir apporté ce changement, cela a fonctionné pour moi.
Alamofire.request(youUrl, method: .post, parameters: param as? [String: Any], encoding: JSONEncoding.default, headers: [:])
.responseJSON { response in
Mis à jour pour Swift 3:
let requestString = "https://thawing-inlet-46474.herokuapp.com/charge.php"
let params = ["stripeToken": token.tokenId, "amount": "200", "currency": "usd", "description": "testRun"]
Alamofire.request(requestString,method: .post, parameters: params, encoding: JSONEncoding.default, headers: [:]).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if response.result.value != nil{
print("response : \(response.result.value)")
}
break
case .failure(_):
print("Failure : \(response.result.error)")
break
}
}
Cela signifie que certains types de paramètres sont incorrects, vérifiez que vous envoyez ces valeurs:
url: String
method: HTTPMethod (E.g: .post)
parameters: [String:Any]
encoding: ParameterEncoding (E.g: JSONEncoding.default)
headers: [String: String]
Assurez-vous que votre parameters
est [String: Any]
c'est à dire
let parameters = ["foo": "bar"]
pas:
let parameters : Parameter = ["foo": "bar"]
Vous obtenez cette erreur en raison de mauvais types de données.
Le type de paramètre doit être [String: Any] et le type de paramètre ne doit pas être facultatif.
Le type d'en-tête doit être [String: String] ou nil et le type d'en-tête ne doit pas non plus être facultatif.
J'espère que ça aide. :-)
J'ai résolu ce problème en m'assurant que mes requestUrl sont des chaînes et non des types d'URL. De plus, j'ai supprimé les arguments de paramètre pour quand le paramètre était nul.
Par exemple.
Alamofire.request(requestUrl, method: .get, encoding: URLEncoding.default)
Les méthodes Alamofire ont été modifiées dans Swift 3 comme suit:
C'est une famille de fonctions très similaires, ce qui laisse penser au compilateur que vous essayez d'utiliser une fonction différente. Vérifiez deux fois que TOUS les arguments que vous fournissez sont le type correct attendu. Par exemple, je passais [String: Any] pour la variante avec en-têtes, qui attendait [String: String] et obtenait la même erreur.
C'est toujours parce que j'utilise des variables optionnelles dans tous les paramètres
Je faisais face au même problème et essayez avec toutes les réponses comme précédemment, ici, et puis j'ai eu la solution et la raison de ce problème.
Ceci est dû à la mauvaise analyse d'objet dans la requête, et finalement à la solution -
theJSONText
- chaîne JSON
urlStr
- Chaîne d'URL
let urlEncoadedJson = theJSONText.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)
let urls = NSURL(string:"urlStr\(urlEncoadedJson ?? "")")
let method: HTTPMethod = .get
Alamofire.request(urls! as URL, method: method, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if response.result.value != nil
{
// write your code here
}
break
case .failure(_):
if response.result.error != nil
{
print(response.result.error!)
}
break
}
}
Remarque - Il n'y a pas de paramètre dans mon URL.
Mon problème était dans les paramètres facultatifs dans les en-têtes qui n'étaient pas déballés.
assurez-vous simplement que tous les paramètres sont dans le bon format, le plus important étant qu'ils soient dans un tableau de type [String: Any].
Alamofire.request(url, method: .post, parameters: parameters, encoding:
JSONEncoding.default, headers: [:]).responseJSON
{ response in
switch (response.result) {
case .success:
print(response)
break
case .failure:
print(Error.self)
}
}