我想知道你们在应用程序中使用URLRequest时如何处理错误。您如何通知用户发生了错误?你甚至会通知你的用户吗?您是否尝试再次重新加载URLRequest?您是否告诉用户关闭当前屏幕并使用警告框再次打开它?我不知道。
一旦出现错误,您的应用就会停止。那么当你发生这种情况并且遇到网络问题时,你会怎么做?Json数据不好?
当您收到“网络连接不良(服务器已关闭)”或URLSession返回时出现错误且互联网连接正常,您会怎么做?
请查看下面的代码,并帮助我弄清楚发生错误时需要做些什么。
let url = URL(string:"http://example/jsonFile.php")
var request = URLRequest(url:url!)
request.httpMethod = "POST"
let postingString = "id=\(id)"
request.httpBody = postingString.data(using: String.Encoding.utf8)
let task = URLSession.shared.dataTask(with: request as URLRequest){(data, response, error) -> Void in
if error != nil {
print("error \(error)")
// *****
// What do you do here? Do you tell your users anything?
// *****
return
}
// Check for Error
if let urlContent = data {
do{
let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: .allowFragments) as! [String: AnyObject]
print("jsonResult \(jsonResult)")
}
catch{
print("JSON serialization failed")
// *****
// What do you do here? Do you tell your users anything?
// *****
}
}
}
task.resume()
答案 0 :(得分:1)
隐藏错误并不执行任何操作通常是个坏主意(请参阅Error Hiding Anti-Pattern)。不幸的是,处理错误并不容易,有时可能很乏味。漂亮的代码示例很快就变得越来越糟糕了#34;何时必须处理异常和错误。学会做得好需要时间。
对于网络连接,您可能希望将请求包装到异步方法中,该方法将完成回调作为参数。此回调通常会收到成功的结果或错误,有时会包含在枚举中以消除歧义(请参阅Result作为示例)。
一旦您知道网络请求失败,您就可以以干净,信息但非阻碍的方式向用户提供该信息。要了解此方案中其他应用程序的作用,请打开手机中的飞行模式,然后四处寻找。
以下是一些例子: