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

时间:2017-02-10 22:58:50

标签: ios swift nsurlsession urlrequest

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

1 个答案:

答案 0 :(得分:1)

隐藏错误并不执行任何操作通常是个坏主意(请参阅Error Hiding Anti-Pattern)。不幸的是,处理错误并不容易,有时可能很乏味。漂亮的代码示例很快就变得越来越糟糕了#34;何时必须处理异常和错误。学会做得好需要时间。

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

一旦您知道网络请求失败,您就可以以干净,信息但非阻碍的方式向用户提供该信息。要了解此方案中其他应用程序的作用,请打开手机中的飞行模式,然后四处寻找。

以下是一些例子:

Apple Music

Apple Music

Facebook Messenger

enter image description here