我一直在我的一个iOS项目中使用Alamofire,但最近升级到Alamofire 3.0时,格式略有变化以返回结果。就我而言,我想调用登录 API 并让它返回结果。可能会发生一些错误,所以我总是在 API 结果中返回问题所在,所以如果响应是 400,我希望我的代码进入失败块,然后将来自我的 API 的消息作为错误的一部分,但我似乎不能所以当结果失败时从请求中获取响应数据。
这是我的代码:
Alamofire.request(
method,
Constants.baseURL + route,
parameters: fullParameters)
.validate()
.responseJSON { response in
let json = JSON(response.result.value!)
switch response.result {
case .Success:
completion?(json["data"])
case .Failure(let errorData):
failure?(errorData, json["errmsg"])
}
}
这里发生的事情是,当响应失败时,它会中断,因为 response.result.value 为 nil,但无论如何我希望它是从 API 返回的 JSON。另一方面,当响应成功时,它会完美地工作。
由于您正在调用validate()
Alamofire会自动验证来自200...299
的状态代码。
如果您不希望 Alamofire 验证您的状态代码,但您想自己手动验证,您有两种选择:
- 删除
.validate()
并手动处理所有内容。 - 将
validate()
更改为要允许的范围的.validate(statusCode: yourRange)
,并手动处理它们。
更多信息在这里。