Alamofire增强了validate()

时间:2016-03-16 08:26:32

标签: swift protocols alamofire

我必须应用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的初学者。

1 个答案:

答案 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)
            }
        })

应该那样工作。否则,您可能想要检查服务器是否实际返回了预期的状态代码