Throw or Rethrow that Error?
Error handling in Swift has come a long way. But wait, there are
rethrows keywords? What's going on?
An in-depth look into the two types of closures, focussing on
Difficulty: Beginner | Easy | Normal | Challenging
This article has been developed using Xcode 11.4.1, and Swift 5.2.2
Imagine a function that adds stuff to
Strings (This is a convoluted example, people!).
We are going to use the following
CustomError to make things clear
The requirements are that we have a function that takes a name and function that takes a
String and returns a
String. This function that we take, however, can throw an error. This leads to our outer function being able to return an error itself.
Already the language of outer function starts to get a little confusing. In steps the code snippet!
of interest is the
addHelloWorld function - this can throw so the
throws keyword is placed before the
-> symbol, and within the function we do indeed throw a
This is reflected in the
func stringBuilder(name: String, closure: (String) throws -> (String)) rethrows function signature - first because the
closure parameter as
(String) throws -> (String) allows the contained function to
throw. However, there is another part of this - the final keyword
rethrows is because the function in the parameter
stringBuilder does not throw an error itself.
Let us get confused
You know the statements above? They are all correct! This means that we are all set.
But what if
stringBuilder can throw an error?
It sounds simple — we can replace the
rethrows keyword with