在一个 catch 块中处理多个 swift 错误
Handle multiple swift errors in one catch block
我对 swift 错误处理有疑问。在我的 swift 脚本中,我必须对可能引发异常的 FileManager 执行多项操作。现在我的第一个想法是,将它们全部放在一个 do-catch 块中。
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 也不是很有帮助 ("Error while restoring backup!")。
我也无法确定抛出的错误是哪种类型,因为我在 FileManager 文档中找不到任何相关信息。
我想一个可行的方法是将每个语句放在它自己的嵌套 do-catch 块中,但在我看来这看起来非常混乱且难以阅读。
所以我的问题是,是否有另一种方法可以确定错误类型或在 catch 块中抛出它的语句,或者找出每个 FileManager 语句抛出的错误类型?
提前致谢,
乔纳斯
首先,不,您无法判断是哪个语句引发了错误,您必须将每个语句都包装在 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
}
我对 swift 错误处理有疑问。在我的 swift 脚本中,我必须对可能引发异常的 FileManager 执行多项操作。现在我的第一个想法是,将它们全部放在一个 do-catch 块中。
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 也不是很有帮助 ("Error while restoring backup!")。
我也无法确定抛出的错误是哪种类型,因为我在 FileManager 文档中找不到任何相关信息。
我想一个可行的方法是将每个语句放在它自己的嵌套 do-catch 块中,但在我看来这看起来非常混乱且难以阅读。
所以我的问题是,是否有另一种方法可以确定错误类型或在 catch 块中抛出它的语句,或者找出每个 FileManager 语句抛出的错误类型?
提前致谢, 乔纳斯
首先,不,您无法判断是哪个语句引发了错误,您必须将每个语句都包装在 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
}