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

时间:2015-09-25 18:06:13

标签: ios swift exception exception-handling

我正在删除NSFileManager这样的临时文件:

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

我不太关心调用时文件是否存在以及是否已经删除,所以就这样了。

在不使用do/catch的情况下,告诉Swift忽略任何抛出错误的优雅方法是什么?

1 个答案:

答案 0 :(得分:50)

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

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

来自Swift文档中的"Error Handling"

  

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

removeItemAtURL()返回&#34;没有&#34; (又名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)

编译时没有警告。