在一个 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
}