我有一个关于快速错误处理的问题。在我的快速脚本中,我必须使用可能引发异常的FileManager执行多项操作。现在我的第一个想法是,将它们全部放在一个捕捉块中。
do {
let fileManager = FileManager.default
try fileManager.moveItem(atPath: destination, toPath: "\(destination).old")
try fileManager.createDirectory(atPath: destination, withIntermediateDirectories: false)
...
} catch {
print(error)
exit(EXIT_FAILURE)
}
现在的问题是,我无法在catch块中确定哪个语句引发了错误。 localizedDescription也没有用处("恢复备份时出错!")。
此外,我无法确切地知道抛出错误的类型,因为我在FileManager文档中找不到任何内容。
我想一种有效的方法,就是将每个语句放在它自己的嵌套do-catch块中,但这在我看来非常混乱且难以阅读。
所以我的问题是,如果有另一种方法来确定错误类型或将其抛出catch块或查找的语句,每个FileManager语句抛出哪种错误类型?
提前致谢, 纳斯
答案 0 :(得分:3)
首先,你不能告诉哪个语句引发了你必须在do / catch块中包装每个错误的错误。
其次,文档没有说出函数抛出的错误,所以你只需要测试那些看起来正确的错误:
do {
let fileManager = FileManager.default
try fileManager.moveItem(atPath: destination, toPath: "\(destination).old")
try fileManager.createDirectory(atPath: destination, withIntermediateDirectories: false)
...
} catch CocoaError.fileNoSuchFile {
// Code to handle this type of error
} catch CocoaError.fileWriteFileExists {
// Code to handle this type of error
} catch {
// Code to handle any error not yet handled
}