Extra argument 'method' in call

故事扮演 提交于 2019-11-29 02:47:43

I got the issue, I have to use JSONEncoding.default instead of .JSON, so the new syntax is

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

I can only refer you to: https://github.com/Alamofire/Alamofire/issues/1508#issuecomment-246207682

Basically, if one of your parameters is of the wrong type, the swift compiler will assume you're using request(urlRequest:URLRequestConvertible) and then, the method is an extra argument

Go over that parameters again and make sure all is of correct type (Parameters?, ParameterEncoding, and HTTPHeaders)

I was having the same issue, the problem is at parameters type, it should be of type [String: Any]. After I made this change, it worked for me.

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

It means that some of the parameters type are wrong, check that you are sending these values:

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

Updated for 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

            }
        }

Make sure your parameters is [String: Any]

i.e

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

Not:

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

You are getting that error because of the wrong data types.

Parameters Type should be [String : Any] and parameters type shouldn't be an optional.

Header Type should be [String : String] or nil and header type shouldn't be an optional as well.

Hope it helps. :-)

I fixed this by ensuring my requestUrls are strings, and not URL types. Also I removed parameter arguments for when parameter was nil.

E.g.

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

Almofire methods changed in Swift 3 as the following:

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

This is a family of functions that are very similar, which makes the compiler think you're trying to use a different function. Double check that ALL of the arguments you're supplying are the CORRECT TYPE that is expected. For example I was passing [String:Any] for the variant with headers, which expected [String:String] and got the same error.

It is always because im using optional variables in any of the parameters

I was facing same problem And try with all answer as previously post here, And then I got the solution and reason of this problem .

This is happened due to pass the wrong object parse in the request, and finally the solution --

theJSONText -- JSON string

urlStr -- URL string

 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
        }

    }

Note - There is no param in my URL .

My problem was in optional parameters in the headers that were not unwrapped.

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

just make sure all the parameters are in the correct format , most importantly the parameters must be in [String:Any] type array.

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