一种优雅的方式来忽略任何方法抛出的错误
我正在用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)
编译没有警告。