【问题标题】:Extra argument 'method' in call调用中的额外参数“方法”
【发布时间】:2017-01-27 01:30:49
【问题描述】:

在最新版本(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: [:])

标签: alamofire swift3


【解决方案1】:

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

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

【讨论】:

  • 对我来说不是固定的,我为此编写了相同的代码:(
  • 现在它给出了方法参数的帖子
  • 它对我有用我已经传递了 HTTPHeaders 类型的 headers 参数。希望这对你有用。
  • 我真的认为netigers的答案应该是公认的。这里的根本问题是当参数类型错误时出现红鲱鱼错误消息。
【解决方案2】:

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

基本上,如果您的参数之一类型错误,则 swift 编译器会假定您使用的是 request(urlRequest:URLRequestConvertible),然后,methodextra argument

再次检查该参数并确保所有参数的类型正确(Parameters?ParameterEncodingHTTPHeaders

【讨论】:

  • 谢谢,我得到了 ParameterEncoding 的值错误的问题,我必须使用 JSONEncoding.default 而不是 .JSON 。
  • 这就是导致我的原因,我使用参数作为字符串而不是 [String:String]
  • 你的解释是人们需要的。不是愚蠢的回应,“这样做......”,谢谢!
  • 我的第一个参数坏了。我需要将let urlString = "host" 更改为static let urlString = "host",因为urlString 变量已附加到类并且我正在编写一个类函数
  • 点赞。 SO的最佳答案之一!
【解决方案3】:

我遇到了同样的问题,问题出在参数类型上,它应该是 [String: Any] 类型。进行此更改后,它对我有用。

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

【讨论】:

  • 是的,有时我们需要定义参数。
【解决方案4】:

表示某些参数类型错误,请检查您是否发送了这些值:

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

【讨论】:

  • 解决了我的问题,谢谢。我不知道为什么 swift 没有更清楚地显示错误。
  • 记得放正确的数据类型,避免使用nil!
【解决方案5】:

为 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

            }
        }

【讨论】:

    【解决方案6】:

    确保您的 parameters 是 [String: Any]

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

    不是:

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

    【讨论】:

    • 这是我的错误,我以为可能是[AnyHashable: Any]
    【解决方案7】:

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

    参数类型应该是 [String : Any] 并且参数类型不应该是可选的。

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

    希望对您有所帮助。 :-)

    【讨论】:

      【解决方案8】:

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

      例如

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

      【讨论】:

        【解决方案9】:

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

        1. 重新排序参数(网址然后方法类型)。
        2. 例如将 Encoding Enum 更改为“JSONEncoding.default”。

        【讨论】:

        • 这是我最近的问题。没有暗示是这样的,而是抱怨 HTTPMethod。 .utf8 和类似的不会这样做,甚至不仅仅是.default。它必须是长名称:JSONEncoding.default
        【解决方案10】:

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

        【讨论】:

        • 没错。我是我的情况,我传递了一个 [String] 参数而不是 [String:String] 并且也得到了同样的错误。
        【解决方案11】:

        总是因为我在任何参数中使用了可选变量

        【讨论】:

        • 我用这个提示解决了我的问题......太好了......谢谢
        【解决方案12】:

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

        这是由于在请求中传递了错误的对象解析,最后解决方法--

        theJSONText -- JSON 字符串

        urlStr -- 网址字符串

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

        注意 - 我的 URL 中没有参数。

        【讨论】:

          【解决方案13】:

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

          【讨论】:

            【解决方案14】:
            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)
                        }
                    }
            

            【讨论】:

              【解决方案15】:

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

              【讨论】:

                猜你喜欢
                • 2017-02-02
                • 2018-07-03
                • 2017-06-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-03-13
                • 2018-06-03
                • 2019-02-23
                相关资源
                最近更新 更多