try…catch, but no finally in Swift

My Swift tip of the day…

Swift handles errors (what we would call exceptions in many other languages) using try and catch, but there’s no finally keyword. Instead, we can wrap a closure and pass to the defer function instead. For example we open some resource (file or whatever – we’re assuming this works fine) we create a defer (a bit like using a Disposable), then we useResource which might exception, but defer will now call closeResource for us

let someResource = openResource()
defer { closeResource(someResource) }

do {
   try useResource(someResource)
} catch {
   throw MyError.resoureFailure()
}