Swift 3 - 如何处理 URLRequest / URLSession 错误?

use*_*472 5 urlrequest ios nsurlsession swift

我想知道你们在应用程序中使用 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()
Run Code Online (Sandbox Code Playgroud)

Ene*_*nso 0

隐藏错误而不执行任何操作通常是一个坏主意(请参阅错误隐藏反模式)。不幸的是,处理错误并不容易,有时可能很乏味。当必须处理异常和错误时,漂亮的代码示例很快就会变得“丑陋”。学习做好这件事需要时间。

在网络连接的情况下,您可能希望将请求包装到以完成回调作为参数的异步方法中。此回调通常会收到成功的结果或错误,有时会包装在枚举中以消除歧义(请参阅Result作为示例)。

一旦您知道网络请求失败,您就可以以干净、信息性但非妨碍性的方式将该信息呈现给用户。要了解其他应用程序在这种情况下的作用,请打开手机中的飞行模式并进行查看。

这里有些例子:

苹果音乐

苹果音乐

脸书信使

在此输入图像描述