我正在尝试使用Alamofire 4.0和Swift 3.0发出POST API请求,但我现在遇到了困难。
我的邮差看起来像这样:
使用Basic Auth
我现在甚至无法编译代码,我也不知道为什么。这是我的功能:
func testCall(token:String, completionHandler: @escaping ((AnyObject?, Error?) -> Void)) {
let urlString = Constant.apiUrlString + Constant.apiPostOrderCard
print(urlString)
let parameters = ["test" : "test"]
Alamofire.request(urlString, method: .post, parameters: parameters, encoding: .JSON, headers: self.header).validate().responseJSON { (request, response, result) -> Void in
switch result {
case .Success(let value):
print(value)
completionHandler(value, nil);
break
case .Failure(let data, let error):
self.handleFailure(data, error: error, response: response, completionHandler: completionHandler)
break
}
}
我做错了什么?
答案 0 :(得分:0)
你刚刚迁移到Alamofire 4吗?有几种语法更改,您需要在版本更新时阅读迁移指南。
这是更新的代码:)
func testCall(token:String, completionHandler: @escaping ((AnyObject?, Error?) -> Void)) {
let urlString = Constant.apiUrlString + Constant.apiPostOrderCard
let parameters : Parameters = ["test": "test"]
Alamofire.request(urlString, method: .post, parameters: parameters).validate().responseJSON { response in
if let status = response.response?.statusCode {
switch(status){
case 200:
if let result = response.result.value {
let JSON = result as! NSDictionary
// implement your logic here
completionHandler(value, nil);
}
break
case 400:
// implement your logic here
self.handleFailure(data, error: error, response: response, completionHandler: completionHandler)
break
default:
break
}
}
}
}
Parameters
是Alamofire的对象,随意使用它,构造函数也改变了。
答案 1 :(得分:0)
只需将encoding: .JSON
替换为encoding: JSONEncoding.default
,并确保parameters
的类型为Parameters
:
Alamofire.request(urlString, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: self.header).validate().responseJSON { response in
switch response.result {
case .success(let json): //do something
case .failure(let error): // do something
}
}