如何处理 swift 3 中的错误?

Posted

技术标签:

【中文标题】如何处理 swift 3 中的错误?【英文标题】:How to work with errors in swift 3? 【发布时间】:2016-11-16 18:36:58 【问题描述】:

我正在使用以下代码:

   let jsonData1 = (try? Data(contentsOf: URL(string: "\(label2)")!)) as Data!
    var error : NSError?
    let ReadableJSON1 = JSON ( data:jsonData1!, options: JSONSerialization.ReadingOptions.mutableContainers, error: nil )


    if (error != nil)

        let myAlert = UIAlertController(title: "Alert", message: error?.localizedDescription, preferredStyle: .alert) //you can change message to whatever you want.
        let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil)
        myAlert.addAction(okAction)
        self.present(myAlert, animated: true, completion: nil)

        return
    

如果应用程序在打开链接中的 json 文件时发现错误,它应该向用户显示警报。目前它正在崩溃,似乎这些操作没有执行,这就是我没有看到警报的原因。请你帮我解决这个问题。

【问题讨论】:

有什么理由不使用trycatch?机制? 从 Swift 2.2 开始,(NS)Error 由 try/catch 管理:developer.apple.com/library/content/documentation/Swift/… 崩溃时堆栈跟踪是什么样的? 当我在手机上模拟它时它只是停止工作 【参考方案1】:

试试这个代码:

var json : [String: AnyObject]? // Property
do 
    let jsonData1 = (try? Data(contentsOf: URL(string: "\(label2)")!)) as Data!
    json = try JSONSerialization.jsonObject(with: jsonData1, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: AnyObject]
 
catch let error as NSError 
    let myAlert = UIAlertController(title: "Alert", message: error?.localizedDescription, preferredStyle: .alert) //you can change message to whatever you want.
    let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil)
    myAlert.addAction(okAction)
    self.present(myAlert, animated: true, completion: nil)

    return

希望它会有所帮助!快乐编码!

【讨论】:

我应该在哪里使用该代码,因为我看不到这里的 json 链接是如何读取的 好吧,您需要读取 do 块内的响应数据。我已经编辑了答案。请检查 let jsonData1 = (try?Data(contentsOf: URL(string: "(label2)")!)) as Data!.. 如果这行代码返回 Data?在此处添加一些日志并检查问题所在。 您正在使用一些库来解析 JSON 数据。我使用了 Apple 提供的 JSONSerialization 类。这就是为什么有很多错误。您能告诉我您在项目中使用的 JSON 库的名称吗? SwiftyJson 是你需要的吗?

以上是关于如何处理 swift 3 中的错误?的主要内容,如果未能解决你的问题,请参考以下文章

swift - 如何处理未捕获的异常

从 JSON + Swift 或 ObjC 检索数据时如何处理 CoreData 中的关系

处理 Mongoose 验证错误——在哪里以及如何处理?

处理包/模块中的错误时如何处理Python异常

如何处理 react/redux 中的请求错误?

如何处理完成闭包中的多个错误