2016-09-19 64 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。 –