一尘不染

一种忽略方法抛出的任何错误的优雅方法

swift

我正在使用NSFileManager这样删除一个临时文件:

let fm = NSFileManager()
fm.removeItemAtURL(fileURL)
// error: "Call can throw but it is not marked with 'try'"

我并不在乎在进行呼叫时文件是否在那里以及是否已被删除,就这样吧。

告诉Swift不使用忽略任何抛出的错误的绝佳方法是do/catch什么?


阅读 150

收藏
2020-07-07

共1个答案

一尘不染

如果您不关心成功与否,可以致电

let fm = NSFileManager.defaultManager()
_ = try? fm.removeItemAtURL(fileURL)

从Swift文档中的“错误处理”中:

您可以try?通过将错误转换为可选值来处理错误。如果在评估try?表达式时抛出错误,则表达式的值为nil

所述removeItemAtURL()返回“无”(又名Void),所以返回值try?表达Optional<Void>。分配此返回值可_避免
_“尝试”结果。 未使用”_警告。

如果你只关心呼叫的结果,但不是在被抛出,那么你可以测试的返回值的具体错误try?打击nil

if (try? fm.removeItemAtURL(fileURL)) == nil {
    print("failed")
}

更新:Swift 3(Xcode 8)开始, 您不需要虚拟分配,至少在这种情况下不需要:

let fileURL = URL(fileURLWithPath: "/path/to/file")
let fm = FileManager.default
try? fm.removeItem(at: fileURL)

编译时不发出警告。

2020-07-07