次のようにNSFileManager
を使用して一時ファイルを削除しています:
let fm = NSFileManager()
fm.removeItemAtURL(fileURL)
// error: "Call can throw but it is not marked with 'try'"
呼び出しが行われたときにファイルがそこにあるかどうか、そしてすでに削除されているかどうかは気にしません。
do/catch
を使用せずに、スローされたエラーを無視するSwiftに伝えるためのエレガントな方法は何でしょうか?
あなたが成功を気にしないかどうか、あなたは呼び出すことができます
_let fm = NSFileManager.defaultManager()
_ = try? fm.removeItemAtURL(fileURL)
_
Swiftドキュメンテーションの "Error Handling" から:
_
try?
_を使用して、エラーをオプションの値に変換し、エラーを処理します。 _try?
_式の評価中にエラーがスローされた場合、式の値はnil
です。
removeItemAtURL()
は "nothing"(別名Void
)を返すため、_try?
_式の戻り値は_Optional<Void>
_です。この戻り値を__
_に割り当てると、の「try?」の結果を回避できます未使用です」警告。
呼び出しの結果だけに関心があり、スローされた特定のエラーには関心がない場合は、nil
に対して_try?
_の戻り値をテストできます。
_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)
_
警告なしでコンパイルします。