如何识别方法抛出的错误

时间:2017-09-29 15:09:07

标签: ios swift error-handling

简单的问题,在之前的主题中尚未回答 - 在将此标记重复之前,请仔细阅读这些主题的答案,问题可能会重复,但答案还不够令人满意 - 如何识别一个方法抛出错误,以便在catch子句中指定它?

例如,请查看下面的代码。它可以工作,但我更喜欢在同一嵌套级别上有一个级别的do和多个catch,而不是嵌套的do(s)。

为了实现这一点,我需要知道抛出哪个ErrorType String.init(contentsOf:encoding :)和String.write(to:atomically:encoding :),显然没有办法弄明白,不是来自文档,也不是源代码。

我在这里错过了什么吗?

    do {
            var contents =  try String(contentsOf: indexFileUrl, encoding: .utf8)
            let jsonText = String(describing: SmartGamesManager.shared.jsonText)
            contents = contents.replacingOccurrences(of: text, with: jsonText)
            // write to file
            do {
                try contents.write(to: indexFileUrl, atomically: false, encoding: .utf8)
            }
            catch  {
                print("could not write file index.html")
            }
        }
        catch {
            print("could not retrieve content of index.html")
        }

1 个答案:

答案 0 :(得分:0)

在'catch'-block中有一个名为'error'的常量,它包含Method抛出的错误。您可以调用其属性“localizedDescription”来获取有关错误的信息,或者您也可以将其转换为NSError并使用其各种属性来获取Method抛出的任何信息

例如:

      do {
                var contents =  try String(contentsOf: indexFileUrl,
encoding: .utf8)
                let jsonText = String(describing: SmartGamesManager.shared.jsonText)
                contents = contents.replacingOccurrences(of: text, with: jsonText)

                do {
                    try contents.write(to: indexFileUrl, atomically: false, encoding: .utf8)
                }
                catch  {
                    print(error.localizedDescription)
                }
            }
            catch let nserr as NSError {
                print(nserr.description) // one of many attributes
            }