我正在删除NSFileManager
这样的临时文件:
let fm = NSFileManager()
fm.removeItemAtURL(fileURL)
// error: "Call can throw but it is not marked with 'try'"
我不太关心调用时文件是否存在以及是否已经删除,所以就这样了。
在不使用do/catch
的情况下,告诉Swift忽略任何抛出错误的优雅方法是什么?
答案 0 :(得分:50)
如果您不关心成功与否,那么您可以致电
let fm = NSFileManager.defaultManager()
_ = try? fm.removeItemAtURL(fileURL)
来自Swift文档中的"Error Handling":
使用
try?
通过将错误转换为可选值来处理错误。 如果在评估try?
表达式时抛出错误,则为该值 表达式为nil
。
removeItemAtURL()
返回"没有" (又名Void
),因此try?
表达式的返回值为Optional<Void>
。
将此返回值分配给_
会避免&#34;尝试结果?&#39;未使用&#34; 警告。
如果您只对通话结果感兴趣但不是
抛出的特定错误然后你可以测试
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)
编译时没有警告。