处理一个catch块中的多个swift错误

时间:2018-01-12 19:28:02

标签: swift error-handling nsfilemanager

我有一个关于快速错误处理的问题。在我的快速脚本中,我必须使用可能引发异常的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语句抛出哪种错误类型?

提前致谢, 纳斯

1 个答案:

答案 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
}