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)
编译时没有警告.