调用中有多余的参数'method'。

54

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

语法如下:


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

requestParam的类型是[String:Any]


你尝试过这个吗:Alamofire.request(urlString, method: .post, parameters: requestParams, encoding: .JSON, headers: [:]) - netdigger
15个回答

70

我明白了问题,我需要使用JSONEncoding.default而不是.JSON,因此新的语法为

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

3
对我来说并没有固定的解决方法,我已经为此编写了相同的代码 :( - Sumeet Mourya
3
现在它为方法参数提供了post。 - Mansuu....
2
它在我的机器上运行正常,我已经传递了带有HTTPHeaders类型的headers参数。希望这对你也有效。 - Hemant Solanki
我真的认为netiggers的答案应该被接受。这里的根本问题是参数类型错误时出现了一个误导性的错误信息。 - Tom Schulz

50

我只能引用以下链接:https://github.com/Alamofire/Alamofire/issues/1508#issuecomment-246207682

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

请再检查一下参数,并确保所有参数都是正确的类型(Parameters?ParameterEncodingHTTPHeaders)。


2
谢谢,我已经解决了问题,ParameterEncoding的值是错误的,我必须使用JSONEncoding.default而不是.JSON。 - CMA
2
这就是导致问题的原因,我使用了字符串作为参数而不是[String:String]。 - yehyatt
你的解释是人们需要的,而不是一个愚蠢的回答:“做这个...”,谢谢! - TheFuquan
我的第一个参数出了问题。我需要将 let urlString = "host" 更改为 static let urlString = "host",因为 urlString 变量附加到类上,而我正在编写一个类函数。 - simple_code
点赞。SO上最好的答案之一! - EmptyStack
这是我的问题。在我的情况下,头字典实际上是 [String: Any],而我认为它是 [String: String](HttpHeaders 只是其别名)。一旦我将错误值强制转换为字符串,它就编译通过了。我正在 userDefaults 中存储一个令牌,当我检索它时,我使用的是 object(forKey:) 而不是 string(forKey:)。 - Tom Schulz

18

我遇到了同样的问题,问题在于参数类型,它应该是[String: Any]类型。当我进行了这个更改后,它对我起作用了。

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

是的,有时我们需要定义参数。 - Anup Gupta

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

            }
        }

10

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

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

问题已解决,谢谢。我不知道为什么Swift不能更清晰地显示错误。 - Ângelo Polotto
请记得使用正确的数据类型,避免使用 nil! - Marlon Ruiz

7

请确保您的参数为[String: Any]

例如:

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

注意:

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

这是我的错误,我假设它可以是 [AnyHashable: Any] - Dielson Sales

5
你之所以出现这个错误是因为数据类型不正确。
参数类型应该是[String : Any],而且参数类型不应该是可选的。
头部类型应该是[String : String]或nil,并且头部类型也不应该是可选的。
希望能有所帮助。 :-)

4

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

例如:

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


3

以下是Swift 3中Almofire方法的更改:

  1. 重新排列参数(先URL,再请求方式)。
  2. 将编码枚举更改为“JSONEncoding.default”。

这对我来说是最近的问题。没有任何提示是这个问题,但它抱怨了HTTPMethod。.utf8和类似的东西行不通,甚至只是.default也不行。必须是长名称:JSONEncoding.default - Alejandro Iván

3

这是一组非常相似的函数,这使得编译器认为您正在尝试使用不同的函数。请仔细检查您提供的所有参数是否都是预期的正确类型。例如,我在传递带有标头的变量时传递了[String:Any],但它期望[String:String],因此出现了相同的错误。


没错。在我的情况下,我传递了一个[String]参数而不是[String:String],结果也得到了同样的错误。 - mourodrigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接