使用Alamofire可以在发送请求时收到事件,无论是否收到响应?就像下面的URLSession方法一样:
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didSendBodyData:(int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend;
编辑: 我的代码是将JSON发送到服务器:
Alamofire.request("http://...", method: HTTPMethod.post, parameters: params, encoding: JSONEncoding.default,
headers: [...]).responseJSON {
response in
if response.result.isSuccess {
print("result is Success")
} else {
print("result is Failure")
}
}
我想处理如果网络断开并且我想知道响应是否到达的处理方法。
在此先感谢您提供的帮助。
答案 0 :(得分:2)
响应验证
默认情况下,无论响应内容如何,Alamofire都会将任何已完成的请求视为成功。如果响应的状态码或MIME类型不可接受,则在响应处理程序之前调用validate
会导致生成错误。
手动验证
Alamofire.request("https://httpbin.org/get")
.validate(statusCode: 200..<300)
.validate(contentType: ["application/json"])
.responseData { response in
switch response.result {
case .success:
print("Validation Successful")
case .failure(let error):
print(error)
}
}
自动验证
自动验证200..<300
范围内的状态代码,并且响应的Content-Type
标头与请求的Accept
标头(如果提供了标头)相匹配。
Alamofire.request("https://httpbin.org/get").validate().responseJSON { response in
switch response.result {
case .success:
print("Validation Successful")
case .failure(let error):
print(error)
}
}
统计指标
时间轴
Alamofire收集Request
整个生命周期中的计时,并创建一个Timeline
对象,该对象公开为所有响应类型的属性。
Alamofire.request("https://httpbin.org/get").responseJSON { response in
print(response.timeline)
}
以上报告了以下Timeline
信息:
Latency
:0.428秒Request Duration
:0.428秒Serialization Duration
:0.001秒Total Duration
:0.429秒取自Alamofire Usage。你可以看得更深。
答案 1 :(得分:1)
您可以只使用标准闭包,它会给您答复。无论响应是否为错误,都将调用此关闭。如果您想查看上传进度,也可以这样做
Alamofire.download("https://httpbin.org/image/png")
.downloadProgress { progress in // progress
print("Download Progress: \(progress.fractionCompleted)")
}
.responseData { response in // usual place to get response
if let data = response.result.value {
let image = UIImage(data: data)
}
}
已阅读Making a request documentation以获得更多信息