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

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

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

我真的不在乎这个文件是否在那里,而且如果这个文件已经被删除了,那就这样吧。

如果不使用do/catch ,Swift会忽略任何抛出的错误,这将是一个do/catch吗?

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

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

从Swift文档中的“error handling”

你用try? 通过将其转换为可选值来处理错误。 如果在评估try?出现错误try? expression式,expression式的值是nil

removeItemAtURL()返回“ removeItemAtURL() ”(又名Void ),因此try?的返回值是try? expression式是Optional<Void> 。 将这个返回值分配给_避免了“尝试的结果”? 未使用“警告。

如果您只对调用的结果感兴趣,而不是在抛出的特定错误中,那么您可以testingtry?的返回值try? 反对nil

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

更新:Swift 3(Xcode 8)开始,你不需要伪赋值,至less在这种情况下不需要:

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

编译没有警告。