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

时间:2016-09-19 11:13:04

标签: alamofire swift3

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

语法为:

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

requestParam的类型是[String:Any]

15 个答案:

答案 0 :(得分:69)

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

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

答案 1 :(得分:49)

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

基本上,如果您的某个参数类型错误,swift编译器会认为您正在使用moment.parseZone,然后request(urlRequest:URLRequestConvertible)method

再次检查该参数并确保所有参数类型正确(extra argumentParameters?ParameterEncoding

答案 2 :(得分:18)

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

<?php
// example csv
$url = 'http://samplecsvs.s3.amazonaws.com/Sacramentorealestatetransactions.csv';
function download_file()
{
    // getting content to use in the example
    $content = file_get_contents($url);
    $filename = '/tmp/sample.csv';

    // creating temp file
    $handle = fopen($filename, 'w+');
    fwrite($handle, $content);
    fclose($handle);

    // setting headers
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($filename).'"');
    header('Content-Length: ' . filesize($filename));
    return readfile($filename);
}

if (isset($_GET['export']) && $_GET['export'] === '1') {
    download_file();
    exit();
}

?>
<html>
<body>
<a href="?export=1">Export</a>
    </body>
</html>

答案 3 :(得分:10)

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

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

答案 4 :(得分: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

            }
        }

答案 5 :(得分:7)

确保您的parameters是[字符串:任意]

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

不会

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

答案 6 :(得分:4)

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

E.g。

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

答案 7 :(得分:4)

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

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

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

希望有帮助。 :-)

答案 8 :(得分:3)

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

  1. 重新排序参数(url然后是方法类型)。
  2. 将编码枚举更改为&#34; JSONEncoding.default&#34;例如。

答案 9 :(得分:3)

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

答案 10 :(得分:2)

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

答案 11 :(得分: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
        }

    }

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

答案 12 :(得分:1)

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

答案 13 :(得分: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)
            }
        }

答案 14 :(得分:0)

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