在最新版本(4.0.0)中调用Alamofire请求方法时出错。
语法为:
Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: .JSON, headers: [:])
requestParam的类型是[String:Any]
答案 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 argument
,Parameters?
和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中改变如下:
答案 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]类型数组。