在最新版本(4.0.0)中调用Alamofire请求方法时出错。
语法是:
Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: .JSON, headers: [:])
requestParam的类型是[String:Any]
我遇到了问题,我必须使用JSONEncoding.default而不是.JSON,所以新的语法是
Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: JSONEncoding.default, headers: [:])
这是一系列非常相似的函数,这使得编译器认为您正在尝试使用不同的函数。仔细检查您提供的所有参数是否为预期的CORRECT TYPE。例如,我正在为带有标题的变体传递[String:Any],期望[String:String]并得到相同的错误。
它始终是因为我在任何参数中使用可选变量
我遇到了同样的问题并尝试了所有的答案,如前所述,然后我得到了这个问题的解决方案和原因。
这是因为在请求中传递了错误的对象解析,最后是解决方案 -
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
}
}
注意 - 我的网址中没有参数。
我的问题是在未解包的标头中的可选参数。
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)
}
}
只需确保所有参数的格式正确,最重要的是参数必须在[String:Any]类型数组中。
我只能推荐你:https://github.com/Alamofire/Alamofire/issues/1508#issuecomment-246207682
基本上,如果你的一个参数是错误的类型,swift编译器将假设你正在使用request(urlRequest:URLRequestConvertible)
然后,method
是一个extra argument
再次检查这些参数并确保所有参数都是正确的类型(Parameters?
,ParameterEncoding
和HTTPHeaders
)
我遇到了同样的问题,问题出在参数类型,它应该是[String:Any]类型。在我做出这个改变后,它对我有用。
Alamofire.request(youUrl, method: .post, parameters: param as? [String: Any], encoding: JSONEncoding.default, headers: [:])
.responseJSON { response in
这意味着某些参数类型错误,请检查您是否正在发送这些值:
url: String
method: HTTPMethod (E.g: .post)
parameters: [String:Any]
encoding: ParameterEncoding (E.g: JSONEncoding.default)
headers: [String: String]
针对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
}
}
确保你的parameters
是[String:Any]
即
let parameters = ["foo": "bar"]
不:
let parameters : Parameter = ["foo": "bar"]
由于数据类型错误,您收到该错误。
参数类型应为[String:Any],参数类型不应为可选参数。
标题类型应为[String:String]或nil,标题类型也不应是可选的。
希望能帮助到你。 :-)
我通过确保我的requestUrls是字符串而不是URL类型来解决这个问题。我还删除了参数为nil时的参数参数。
EG
Alamofire.request(requestUrl, method: .get, encoding: URLEncoding.default)
Alamofire方法在Swift 3中改变如下: