我正在使用NSFileManager这样删除一个临时文件:
NSFileManager
let fm = NSFileManager() fm.removeItemAtURL(fileURL) // error: "Call can throw but it is not marked with 'try'"
我并不在乎在进行呼叫时文件是否在那里以及是否已被删除,就这样吧。
告诉Swift不使用忽略任何抛出的错误的绝佳方法是do/catch什么?
do/catch
如果您不关心成功与否,可以致电
let fm = NSFileManager.defaultManager() _ = try? fm.removeItemAtURL(fileURL)
从Swift文档中的“错误处理”中:
您可以try?通过将错误转换为可选值来处理错误。如果在评估try?表达式时抛出错误,则表达式的值为nil。
try?
nil
所述removeItemAtURL()返回“无”(又名Void),所以返回值try?表达Optional<Void>。分配此返回值可_避免 _“尝试”结果。 未使用”_警告。
removeItemAtURL()
Void
Optional<Void>
_
如果你只关心呼叫的结果,但不是在被抛出,那么你可以测试的返回值的具体错误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)
编译时不发出警告。