swift - 任务因超时而失败时如何显示消息
问题描述
当任务由于超时而结束时,我需要一种干净的方式来打印(“错误”)这个例子。
func getUserDataService() -> Bool{
var getDataStatus = false
//Create the url with NSURL
let url = URL(string: "http://someurl")! //change the url
//Create the session object
let session = URLSession.shared
//Now create the URLRequest object using the url object
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.timeoutInterval = 15
//create dataTask using the session object to send data to the server
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
guard error == nil else {
return
}
guard let data = data else {
return
}
do {
//create json object from data
if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
if let httpResponse = response as? HTTPURLResponse {
if httpResponse.statusCode == 200 {
getDataStatus = true
} else {
}
}
}
} catch let error {
print(error)
}
})
task.resume()
return getDataStatus
}
它在失败时会打印以下内容,但我不确定在哪里控制它。
2019-05-27 13:53:58.501322-0400 AppName[60195:841789] 任务 <AB410EF3-5520-44AD-A458-DD75D1F6AD09>.<3> 完成错误 - 代码:-1001
2019-05-27 13:53 :58.505525-0400 AppName[60195:842001] 任务 <AB410EF3-5520-44AD-A458-DD75D1F6AD09>.<3> HTTP 加载失败(错误代码:-999 [1:89])
解决方案
请阅读文档URL 加载系统错误代码。超时错误-1001
又名NSURLErrorTimedOut
在数据任务的完成处理程序中返回错误。处理它!
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
if let nserror = error as NSError?,
nserror.code == NSURLErrorTimedOut {
// do something
return
}
除此之外,您不能Bool
从该方法返回值,您必须添加一个完成处理程序
func getUserDataService(completion: @escaping (Bool) -> Void) {
...
并打电话
completion(true)
并删除
return getDataStatus
推荐阅读
- python - 在重载 python 中使用 Literal[] 字符串
- variables - 一个 ansible playbook 的输入需要传递给另一个 playbook
- azure - Azure 上的有状态和无服务器服务
- assembly - Visual Studio Assembler 默认符号代码
- ios - 有没有人用 Nativescript MIDI 和乐器说话?
- mysql - 有条件地加入表
- python - ValueError:无法将输入数组从形状(512,512,3)广播到形状(512,512)
- python - 验证输入值 - PySimpleGUI
- android-studio - Play 控制台:Google Play 商店应用的新手,是否必须进行封闭测试和开放测试?
- python - Minimalmodbus 非法地址