swift - Swift 3 中的错误处理

标签 swift error-handling try-catch swift3

我正在将我的代码迁移到 Swift 3 并在我的 do/try/catch block 中看到一堆相同的警告。我想检查一个赋值是否不返回 nil,如果它不起作用,则在控制台打印一些东西。 catch block 说它“无法访问,因为在‘do’ block 中没有抛出错误”。我想用一个 catch block 捕获所有错误。

let xmlString: String?
    do{
        //Warning for line below: "no calls to throwing function occurs within 'try' expression
        try xmlString = String(contentsOfURL: accessURL, encoding: String.Encoding.utf8)

        var xmlDict = XMLDictionaryParser.sharedInstance().dictionary(with: xmlString)
        if let models = xmlDict?["Cygnet"] {
            self.cygnets = models as! NSArray
        }

    //Warning for line below: "catch block is unreachable because no errors are thrown in 'do' block
    } catch {
        print("error getting xml string")
    }

我该如何编写一个正确的 try catch block 来处理赋值错误?

最佳答案

您可以做的一种方法是在发现 nil 时抛出您自己的错误。

有这种你自己的错误:

enum MyError: Error {
    case FoundNil(String)
}

你可以这样写:

    do{
        let xmlString = try String(contentsOf: accessURL, encoding: String.Encoding.utf8)
        guard let xmlDict = XMLDictionaryParser.sharedInstance().dictionary(with: xmlString) else {
            throw MyError.FoundNil("xmlDict")
        }
        guard let models = xmlDict["Cygnet"] as? NSArray else {
            throw MyError.FoundNil("models")
        }
        self.cygnets = models
    } catch {
        print("error getting xml string: \(error)")
    }

关于swift - Swift 3 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38835571/

相关文章:

swift - 有没有办法可以将 KVP 字典转换为字符串?

error-handling - 如何修复 VaList 的 "may not be safely transferred across an unwind boundary"?

php - 尝试不使用 Stripe 充电

c# - 如何判断 .NET 调用抛出哪些异常?

java - EOFException - 如何处理?

swift - 无法更改 SCNCone 的颜色 - Scenekit

json - 使用 json 数据将 curl post 形成为 swift http post

ios - 找不到接受 Swift 中提供的参数的 “init” 的重载

python - python和 celery : override hard timeouts for use with gevent pool

postgresql - PostgreSQL View 错误处理