1. Présentation
Ressemblant aux expressions Lambda de certains
autres langages, les closures permettent en Swift de manipuler des
blocs d’instruction comme toute autre structure de données
: les stocker dans des variables ou des propriétés,
les passer en paramètre ou les définir comme valeur
de retour d’une fonction.
On les utilise souvent en Swift. Dans le cas
des animations, elles permettent, par exemple, de déclarer
les valeurs à manipuler mais aussi le code à exécuter à la
fin d’une animation.
Une closure est un type avec une notation
bien particulière.
(paramètres) -> (retour)
Le code suivant permet par exemple de déclarer
une variable ou propriété maClosure de
type closure prenant en paramètre deux entiers et retournant
un booléen :
var maClosure: (Int, Int) -> (Bool)
Pour déclarer la closure elle-même,
on utilise la syntaxe suivante :
{ (paramètres) -> (retour) in code à exécuter }
On peut passer à la variable maClosure une fonction qui prend par
exemple deux entiers et qui renvoie vrai s’ils
sont égaux :
maClosure = { (a: Int, b: Int) -> (Bool) in
return a == b
}
Ici on nomme les deux paramètres
entiers a et b afin
de pouvoir les utiliser dans le bloc de code, on spécifie
que la closure renvoie un booléen avec la syntaxe -> (Bool), on utilise ensuite les
paramètres a et b dans une instruction ...