我有一个函数,它的完成处理程序中包含一个responseObject。目前,当我调用它时,它会返回 json 正文以及任何错误。
但是,我正在使用的 API 的某些部分不会在响应正文中返回任何数据,它们仅返回响应(200、404 等...)
我正在考虑将响应附加到返回的空 json 对象中,然后意识到这很愚蠢,如果我也返回 NSHTTPURLResponse
可能会更好,但是我的一切发现只是解释了如何返回responseObject以及错误...
这是返回完成处理程序的函数:
func makePostRequest(url : String, params : AnyObject, completionHandler: (responseObject: NSHTTPURLResponse, JSON?, error: NSError?) -> ()) -> Request? {
println("params = \(params)")
return Alamofire.request(.POST, url, parameters: params as? [String : AnyObject], encoding: .JSON)
.responseJSON { (request, response, data, error) in completionHandler(
//This is wrong
response: response as? NSHTTPURLResponse,
responseObject:
{
println("Request is \(request)")
println("Response is \(response)")
println("Data is \(data)")
println("Error is \(error)")
//Append the response to this JSON object?
//
var json:JSON = [:]
if let anError = error
{
println(error)
}
else if let data: AnyObject = data
{
json = JSON(data)
}
//probably better to return the two...
//
return (response, json)
}(),
error: error
)
}
}
这就是它的使用方式:
networking.makePostRequest(documentUrl, params: docParams) { response, json, error in
println("response is: \(response)")
println("document json: \(json)")
println("document error: \(error)")
}
我已将“响应”位添加到所有代码位中,我确定这是可能的吗?只是不知道如何实现它..
最佳答案
对于那些试图弄清楚如何以这种方式返回东西的人,我这样解决了它:
func makePostRequest(url : String, params : AnyObject, completionHandler: (httpResponse: NSHTTPURLResponse, responseObject:JSON?, error: NSError?) -> ()) -> Request? {
println("params = \(params)")
return Alamofire.request(.POST, url, parameters: params as? [String : AnyObject], encoding: .JSON)
.responseJSON { (request, response, data, error) in completionHandler(
//This is wrong
httpResponse: response!,
responseObject:
{
println("Request is \(request)")
println("Response is \(response)")
println("Data is \(data)")
println("Error is \(error)")
//Append the response to this JSON object?
//
var json:JSON = [:]
if let anError = error
{
println(error)
}
else if let data: AnyObject = data
{
json = JSON(data)
}
return json
}(),
error: error
)
}
}
然后这样调用它:
networking.makePostRequest(workDocumentUrl, params: params) { response, json, error in
if response.statusCode == 200{
//do something
}
println("json: \(json)")
println("error: \(error)")
}
关于ios - Alamofire 完成处理程序返回响应+数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32222697/