简单的问题,在之前的主题中尚未回答 - 在将此标记重复之前,请仔细阅读这些主题的答案,问题可能会重复,但答案还不够令人满意 - 如何识别一个方法抛出错误,以便在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")
}
答案 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
}