Alamofire Swift 3.0 Extra argument in call

匿名 (未验证) 提交于 2019-12-03 01:49:02

问题:

I have migrated my project to Swift 3 (and updated Alamofire to latest Swift 3 version with pod 'Alamofire', '~> 4.0' in the Podfile).

I now get an "Extra argument in call" error on every Alamofire.request. Eg:

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

Can anybody tell me why ?

回答1:

According to Alamofire documentation for version 4.0.0 URL request with HTTP method would be followings:

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) 

So your url request will be:

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

and a sample request will be:

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 } 

Hope this helps!



回答2:

This one worked for me.
No need to remove encoding parameter

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          }     } 

and make sure that the parameters are of type

[String:Any]? 

In case of Get

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          }     } 

Even works with

JSONEncoding.default  

For Headers

If you are passing headers, make sure their type should be [String:String]

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



回答3:

Post method Alamofire 4.0 with Swift 3.0 and xCode 8.0

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


回答4:

My solution is if you are using headers, its type must be [String:String].



回答5:

I just resolved the same problem as you have. The problem is I have imported Alamofire in the header, so I just remove the Alamofire when call request. Like that:

request(.POST, patientIdUrl, parameters: nil, headers: nil, encoding: .JSON)

I hope it can help you.



回答6:

This error is up to parameters value. It has to be [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..


回答7:

I ran into this same Extra argument 'method' in call error when my URL variable was out of scope.

In your case, please make sure both baseUrl and nextPatientIdUrl are in scope when they are being used Alamofire.request(patientIdUrl,..) method.

Hopefully this resolves your issue. Thanks You!



回答8:

For me this is working.

For GET Request

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          }      } 

For 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          }     } 

Thanks @Rajan Maheswari.



回答9:

I fixed this issue with:

  1. Reorder parameters (url then method type).
  2. Change Encoding Enum to be "JSONEncoding.default" for example.

Note that: Alamofire methods signature change in Swift 3



回答10:

Two things that I found worth noting.

  1. Remove the first url label before its value. Use Alamofire.request("https://yourServiceURL.com", method: .post, instead of Alamofire.request(url: "https://yourServiceURL.com", method: .post,.
  2. Make sure the data type of the parameters is [String: String]. Declare it explicitly.


回答11:

I copy this code from Alamofire,create a URLRequest and used Alamofire.request(URLRequest) method, avoid this error

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


回答12:

I fixed this issue this way:

Just remove extra parameters, just parameters, encoding and headers, if these parameters are nil you can remove then and leave this way,

Alamofire.request(yourURLString, method: .post) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!