2016-09-19 124 views
28

在最新版本(4.0.0)中调用Alamofire请求方法时出错。呼叫中的额外参数“方法”

的语法是:

Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: .JSON, headers: [:]) 

requestParam的类型是[字符串:任何]

+0

你尝试:'Alamofire.request(urlString,方法:.POST,参数:requestParams,编码:以.json,标题:[:])' – netigger

+0

是的,这是有我想iIhave错过了在编写代码语法。我正在纠正这一点。 – Seema

回答

42

我的问题,我必须使用JSONEncoding.default代替以.json,所以新的语法是

Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: JSONEncoding.default, headers: [:]) 
+1

不是固定的我,我已经写了这个相同的代码:( –

+3

现在它提供了方法论点帖子 –

23

我只能向您推荐:https://github.com/Alamofire/Alamofire/issues/1508#issuecomment-246207682

基本上,如果你的参数之一是错误的类型,swift编译器会假设你使用的是request(urlRequest:URLRequestConvertible),然后methodextra argument

再说明一下参数,并确保所有正确类型的(Parameters?ParameterEncodingHTTPHeaders

+1

谢谢,我得到的问题ParameterEncoding的值是错误的,我必须使用JSONEncoding.default而不是.JSON。 – Seema

+1

这是什么导致了我,我使用参数作为字符串而不是[字符串:字符串] – yehyatt

+0

您的解释是人们需要的。不是一个愚蠢的回应,“做这个......”,谢谢! – TheFuquan

4

我通过确保我的requestUrls是字符串而不是URL类型来解决这个问题。另外我删除了当参数为nil时的参数参数。

E.g.

Alamofire.request(requestUrl, method: .get, encoding: URLEncoding.default)

3

Almofire方法夫特3改变为以下:

  1. 重新排序参数(URL然后方法类型)。
  2. 例如,将编码Enum改为“JSONEncoding.default”。
2

这是非常相似功能的家庭,这使编译器认为你正在尝试使用不同的功能。仔细检查你提供的所有参数都是预期的正确类型。例如,我为包含头文件的变体[String:Any]传递了[String:String],并得到了相同的错误。

+0

这是正确的。我是我的情况下我传递[String]参数而不是[String:String]并得到 – mourodrigo

2

这意味着,一些参数类型错了,请检查您要发送这些值:

url: String 
method: HTTPMethod (E.g: .post) 
parameters: [String:Any] 
encoding: ParameterEncoding (E.g: JSONEncoding.default) 
headers: [String: String] 
5

更新了斯威夫特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 

      } 
     } 
3

确保您parameters是[字符串:任何]

let parameters = ["foo": "bar"] 

不:

let parameters : Parameter = ["foo": "bar"] 
+0

这是我的错误,我认为它可能是'[AnyHashable:Any]'。 –

1

我的问题是在那些没有拆开头可选参数。

1

这是因为任何参数

+0

我解决了我的问题,这个提示...非常感谢 –

3

我有同样的问题,使用可选变量IM总是,问题是在参数类型,它应该是类型[字符串:任何]。我做了这个改变后,它对我有效。

Alamofire.request(youUrl, method: .post, parameters: param as? [String: Any], encoding: JSONEncoding.default, headers: [:]) 
       .responseJSON { response in 
+0

是的,有些时候我们需要定义PARAM。 –