调用中的额外参数'方法'

问题描述 投票:51回答:15

在最新版本(4.0.0)中调用Alamofire请求方法时出错。

语法是:

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

requestParam的类型是[String:Any]

alamofire swift3
15个回答
70
投票

我遇到了问题,我必须使用JSONEncoding.default而不是.JSON,所以新的语法是

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

3
投票

这是一系列非常相似的函数,这使得编译器认为您正在尝试使用不同的函数。仔细检查您提供的所有参数是否为预期的CORRECT TYPE。例如,我正在为带有标题的变体传递[String:Any],期望[String:String]并得到相同的错误。


2
投票

它始终是因为我在任何参数中使用可选变量


2
投票

我遇到了同样的问题并尝试了所有的答案,如前所述,然后我得到了这个问题的解决方案和原因。

这是因为在请求中传递了错误的对象解析,最后是解决方案 -

theJSONText - JSON字符串

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

    }

注意 - 我的网址中没有参数。


1
投票

我的问题是在未解包的标头中的可选参数。


0
投票
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)
            }
        }

0
投票

只需确保所有参数的格式正确,最重要的是参数必须在[String:Any]类型数组中。


50
投票

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

基本上,如果你的一个参数是错误的类型,swift编译器将假设你正在使用request(urlRequest:URLRequestConvertible)然后,method是一个extra argument

再次检查这些参数并确保所有参数都是正确的类型(Parameters?ParameterEncodingHTTPHeaders


18
投票

我遇到了同样的问题,问题出在参数类型,它应该是[String:Any]类型。在我做出这个改变后,它对我有用。

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

10
投票

这意味着某些参数类型错误,请检查您是否正在发送这些值:

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

10
投票

针对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

            }
        }

7
投票

确保你的parameters是[String:Any]

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

不:

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

5
投票

由于数据类型错误,您收到该错误。

参数类型应为[String:Any],参数类型不应为可选参数。

标题类型应为[String:String]或nil,标题类型也不应是可选的。

希望能帮助到你。 :-)


4
投票

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

EG

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


3
投票

Alamofire方法在Swift 3中改变如下:

  1. 重新排序参数(url然后方法类型)。
  2. 例如,将编码枚举更改为“JSONEncoding.default”。
© www.soinside.com 2019 - 2024. All rights reserved.