Swift version: 5.10
The try/catch syntax was added in Swift 2.0 to make exception handling clearer and safer. It's made up of three parts: do
starts a block of code that might fail, catch
is where execution gets transferred if any errors occur, and any function calls that might fail need to be called using try
.
Here's a working example that loads an input.txt file from the app bundle into a string:
if let filename = Bundle.main.path(forResource: "input", ofType: "txt") {
do {
let str = try String(contentsOfFile: filename)
print(str)
} catch {
print("The file could not be loaded")
}
}
There are two other ways of using try
, but neither are really recommended. The first is like this:
let filename = "somefile.txt"
let str = try! String(contentsOfFile: filename)
Note the exclamation mark: try!
. This means "I realize this call might throw an exception, but trust me: it never, ever will." This is useful only if you're 100% sure the call is safe. In our example we're loading a file from the app bundle, and if that file isn't there it means our app is corrupted, so it's OK to use here. You don't need do/catch when you use try!
.
The second option is try?
which means "if this call throws an exception, just return nil instead." This is closer to the Objective-C way of handling errors, which was a bit scruffy. If this is your preferred way of handling errors, then go for it! You don't need do/catch when use try?
, but you should check and unwrap the result carefully.
TAKE YOUR SKILLS TO THE NEXT LEVEL If you like Hacking with Swift, you'll love Hacking with Swift+ – it's my premium service where you can learn advanced Swift and SwiftUI, functional programming, algorithms, and more. Plus it comes with stacks of benefits, including monthly live streams, downloadable projects, a 20% discount on all books, and more!
Available from iOS 7.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.