gpt4 book ai didi

swift - Alamofire validate() 的增强

转载 作者:行者123 更新时间:2023-11-30 10:05:50 25 4
gpt4 key购买 nike

我必须应用Web服务API,它也返回状态代码不是200...<300的响应。意味着400,500,404等内部也有响应json。但是,我发现Alamofire validate()并且它返回.Success 和 .Failure。但是,不幸的是,.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:["":""])
}

}

所以,我可以处理当我们有 400,404 状态代码时将返回的响应 json。有什么方法可以在 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 的初学者。

最佳答案

首先,您应该在对 validate 的调用中指定预期的状态代码。假设您的有效预期代码是 200, 400,500, 404。那么您甚至不必检查响应结果,只需根据 validate 方法的文档验证响应没有错误即可:

If validation fails, subsequent calls to response handlers will have an associated error.

因此,就您的情况而言,我认为您的代码可以简化如下(我假设代码中出现的 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)
}
})

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

关于swift - Alamofire validate() 的增强,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36030260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com