我必须应用web服务api,它也返回状态代码不是200的响应...< 300.Means里面也有响应json 400,500,404等。但是,我发现Alamofire validate()和它返回。成功和失败。但不幸的是,.Success没有捕获400,404,500的响应。所以,我确实需要增强Alamofire validate()来满足我的要求。那么,对此有何帮助?
现在我确实喜欢那个
import Foundation
import Alamofire
import SwiftyJSON
protocol RequestTokenAPIProtocol{
func didSuccessRequestToken(results:JSON,statusCode : Int)
func didFailRequestToken(err : NSError)
}
class RequestTokenAPI{
var delegate : RequestTokenAPIProtocol
init(delegate: RequestTokenAPIProtocol){
self.delegate=delegate
}
func post(requestURL:String,param:[String:String]){
Alamofire.request(.POST, requestURL, parameters: param)
.response { request, response, data, error in
if error != nil{
self.delegate.didFailRequestToken(error!)
}
let json = JSON(data: data!)
self.delegate.didSuccessRequestToken(json,statusCode: (response?.statusCode)!)
}
}
func doRequestToken(){
post(REQUEST_TOKEN,param:["":""])
}
}
所以,我可以处理响应json,当我们有400,404状态代码时它将返回。在Alamofire有什么方法可以做到吗?
func post(requestURL:String){
Alamofire.request(.GET, requestURL, parameters: nil)
.validate()
.responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
self.delegate.didSuccessRequestToken(json)
}
case .Failure(let error):
self.delegate.didFailCheckingHeader(error)
}
}
}
我真的需要帮助我的用法看起来好不好?如果有更好的方法来处理回复,请指导我,因为我是Alamofire的初学者。
答案 0 :(得分:1)
首先,您应在validate
的调用中指定预期的状态代码。假设您的有效预期代码为200,400,500,404。那么您甚至不必检查响应结果,只需验证响应没有错误,根据{{1的文档方法:
如果验证失败,后续对响应处理程序的调用将产生相关的错误。
因此,在您的情况下,我认为您的代码可以简化为以下内容(我假设您的代码中出现的JSON
类是SwiftyJSON):
Alamofire.request(route)
.validate(statusCode: [200, 400,500, 404])
.responseJSON(completionHandler: { (response: Response<AnyObject, NSError>) -> Void in
if let error = response.result.error {
self.delegate.didFailCheckingHeader(error)
} else if let jsonObject: AnyObject = response.result.value {
let json = JSON(jsonObject)
self.delegate.didSuccessRequestToken(json)
}
})
应该那样工作。否则,您可能想要检查服务器是否实际返回了预期的状态代码