一种优雅的方法来忽略方法引发的任何错误

Des*_*ume 28 exception-handling exception ios swift

我正在删除一个临时文件,NSFileManager如下所示:

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

我不在乎调用时文件是否在那里以及它是否已被删除,所以就这样吧.

什么是一种优雅的方式告诉Swift忽略任何抛出的错误,而不使用do/catch

Mar*_*n R 54

如果你不关心成功与否,那么你可以打电话

let fm = NSFileManager.defaultManager()
_ = try? fm.removeItemAtURL(fileURL)
Run Code Online (Sandbox Code Playgroud)

从Swift文档中的"错误处理":

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

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

如果你只在通话的结果中被抛出,那么你可以测试的返回值的特定错误感兴趣,但并不try?反对nil:

if (try? fm.removeItemAtURL(fileURL)) == nil {
    print("failed")
}
Run Code Online (Sandbox Code Playgroud)

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

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

编译时没有警告.