Controlling the lifetime
In our code, we have used an @autoclosure(escaping)
attribute. It is a very powerful attribute and it deserves to be covered in detail. There is also an @noescape
attribute. Let's explore them in more detail.
Applying the @autoclosure and @noescape attributes
First, let's have a look at when and how we could use these attributes. We can apply them to a function parameter with a function type. A function type can be represented as a method, function, or closure and it has (parameters) -> (return)
notation. Here are a few examples:
func aFunc(f: () -> Void ) func increase(f: () -> Int ) -> Int func multiply(f: (Int, Int) -> Int ) -> Int
@autoclosure
The @autoclosure
attribute can be applied to a parameter with a function type that has no arguments and returns any type, () -> T
. For example:
func check(@autoclosure condition: () -> Bool) func increase(@autoclosure f: () -> Int ) -> Int
When we use an increase
function without the @autoclosure
...