是否可以使用Alamofire验证程序获取解析的JSON响应,检查属性并根据该值返回true / false?
我有一个始终返回200个响应代码的API,但响应具有成功属性。
我想在触发responseJSON回调之前检查此属性,如果success == true则只调用responseJSON。
这可以使用自定义验证器吗?
答案 0 :(得分:3)
找到一个我感觉很好的解决方案。首先,我创建了扩展方法来检查错误并提取我感兴趣的数据。我有一个成功的回调和一个错误回调。
import Foundation
import Alamofire
extension Request {
public func apiSuccess(
queue queue: dispatch_queue_t? = nil,
options: NSJSONReadingOptions = .AllowFragments,
completionHandler: [String:AnyObject] -> Void)
-> Self
{
return response(
queue: queue,
responseSerializer: Request.JSONResponseSerializer(options: options),
completionHandler: { response in
if let jsonValue = response.result.value as? [String:AnyObject] {
let success = jsonValue["success"] as! Bool
if (success) {
completionHandler(jsonValue["object"] as! [String:AnyObject])
}
}
}
)
}
public func apiError(
queue queue: dispatch_queue_t? = nil,
options: NSJSONReadingOptions = .AllowFragments,
completionHandler: [String] -> Void)
-> Self
{
return response(
queue: queue,
responseSerializer: Request.JSONResponseSerializer(options: options),
completionHandler: { response in
if let jsonValue = response.result.value as? [String:AnyObject] {
let success = jsonValue["success"] as! Bool
if (!success) {
let errorDict = jsonValue["errors"] as! [String:[String]]
var errors : [String] = []
errorDict.keys.forEach { key in
errors += errorDict[key] as [String]!
}
completionHandler(errors)
}
}
}
)
}
}
然后我可以像这样使用它:
Alamofire.request(.POST, url,
parameters: parameters,
encoding: .JSON)
.apiSuccess { response in
print("Success Callback", response)
}
.apiError { errors in
print("Errors ", errors)
}
答案 1 :(得分:0)
我不这么认为。验证器块不接收响应数据作为参数,只接收标题等。