I'm removing a temporary file with NSFileManager
like this:
let fm = NSFileManager() fm.removeItemAtURL(fileURL) // error: "Call can throw but it is not marked with 'try'"
I don't really care if the file is there when the call is made and if it's already removed, so be it.
What would be an elegant way to tell Swift to ignore any thrown errors, without using do/catch
?
In the catch block you can mention the exception and ignore keyword for that exception.
The try-catch is the simplest method of handling exceptions. Put the code you want to run in the try block, and any Java exceptions that the code throws are caught by one or more catch blocks. This method will catch any type of Java exceptions that get thrown. This is the simplest mechanism for handling exceptions.
Sometimes, you may want to ignore an exception thrown by your Java program without stopping the program execution. To ignore an exception in Java, you need to add the try... catch block to the code that can throw an exception, but you don't need to write anything inside the catch block.
If you can sense what type of exceptions may arise, create a small separate code to rebound from this state. Be specific about all different exceptions. Depending on your program, these exceptions may hamper your data if not written well. Try using statements that can make error handling for you.
If you don't care about success or not then you can call
let fm = NSFileManager.defaultManager() _ = try? fm.removeItemAtURL(fileURL)
From "Error Handling" in the Swift documentation:
You use
try?
to handle an error by converting it to an optional value. If an error is thrown while evaluating thetry?
expression, the value of the expression isnil
.
The removeItemAtURL()
returns "nothing" (aka Void
), therefore the return value of the try?
expression is Optional<Void>
. Assigning this return value to _
avoids a "result of 'try?' is unused" warning.
If you are only interested in the outcome of the call but not in the particular error which was thrown then you can test the return value of try?
against nil
:
if (try? fm.removeItemAtURL(fileURL)) == nil { print("failed") }
Update: As of Swift 3 (Xcode 8), you don't need the dummy assignment, at least not in this particular case:
let fileURL = URL(fileURLWithPath: "/path/to/file") let fm = FileManager.default try? fm.removeItem(at: fileURL)
compiles without warnings.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With