Skip to main content

Alessandros's Blog - Build with freedom. Share with purpose

8 Juillet 2025 - Closures Swift : quand mon cerveau fait des nœuds !

Jour 32 de formation et jour 9 des 100 Days of SwiftUI - Aujourd’hui, je me suis attaqué aux closures en Swift. Et franchement, j’ai l’impression d’avoir ouvert une boîte de Pandore ! C’est comme si j’avais devant moi la toupie d’Inception qui est sur le point de tomber (ou non)… 🌀

# Mon cerveau en ébullition

Les closures m’ont littéralement fait exploser la tête ! J’ai tout de suite reconnu les fonctions anonymes de JavaScript, mais Swift pousse le concept beaucoup plus loin avec ses raccourcis syntaxiques.

Le plus déstabilisant, c’est toutes les options d’écriture qu’on a pour améliorer la lisibilité du code.

# Apprentissages du jour

## Qu’est-ce qu’une closure ?

Une closure, c’est une fonction anonyme qu’on peut stocker dans une variable ou passer en paramètre. C’est comme avoir une boîte à outils de petites fonctions qu’on peut utiliser à la demande.

## Copier des fonctions

Premier concept qui m’a surpris : en Swift, on peut copier une fonction dans une variable :

func greetUser() {
    print("Hi there!")
}

var greetCopy = greetUser // sans les parenthèses !
greetCopy()

## Syntax des closures

Là où ça devient fascinant (et confus), c’est avec la syntaxe. On peut écrire la même chose de plusieurs façons :

// Version complète
let sortedTeam = team.sorted(by: { (a: String, b: String) -> Bool in
    return a < b
})

// Version simplifiée avec trailing closure
let sortedTeam = team.sorted { a, b in
    a < b
}

// Version ultra-courte avec shorthand
let sortedTeam = team.sorted { $0 < $1 }

## Les méthodes qui brillent avec les closures

J’ai découvert des méthodes très puissantes :

  • filter : pour sélectionner des éléments selon un critère
  • map : pour transformer chaque élément
  • sorted : pour trier selon une logique personnalisée

## Passer plusieurs closures

Concept avancé que je commence à peine à comprendre : on peut passer plusieurs closures à une fonction. C’est apparemment très courant en SwiftUI.

# Challenge pratique : les nombres chanceux

Le checkpoint 5 m’a bien fait travailler les méninges ! Partir d’un tableau de nombres et :

  • Filtrer les nombres impairs
  • Les trier
  • Les transformer en phrases
  • Les afficher

J’ai réussi à tout enchaîner en une seule instruction fluide avec les hints de Paul. C’est satisfaisant !

# Mes exercices d’approfondissement

J’ai créé plusieurs exercices pour bien ancrer les concepts :

  • Closures basiques : doubler un nombre, vérifier la parité
  • Opérations avec paramètres : addition, salutations
  • Chaînage de méthodes : filtrer, transformer et trier des fruits
  • Fonctions acceptant des closures : créer ses propres outils réutilisables

L’exercice le plus complexe était de créer une fonction qui valide ET transforme une valeur. Claude m’a aidé à corriger ma première version qui avait des défauts de conception.

## Pratique supplémentaire avec UnWrap

J’ai aussi effectué les sessions de l’application UnWrap pour les closures afin de pouvoir faire les exercices pratiques directement sur l’application. UnWrap me permettra de faire plus d’exercices à la méthode Duolingo n’importe où et pas dans Xcode uniquement, un plus à la phase d’apprentissage.

# Mon après-midi : wireframes et prototypes HD

Cet après-midi, j’ai travaillé sur la deuxième application du portfolio : une app de quiz pour QuickTest Academy. J’ai créé les wireframes et les prototypes HD, et voici le résultat :

C’était une session intense de design qui m’a bien vidé le cerveau, surtout en complément des closures du matin !

# État mental de fin de journée

Je suis une vraie loque lessivée ! Après la session de design wireframes et prototypages pour mon deuxième projet, je sens que j’ai besoin de revoir encore les closures car c’est un sujet qui va être difficile à assimiler.

Les closures ouvrent tellement de possibilités que j’ai l’impression de découvrir un nouveau langage dans le langage. Mon défi maintenant : ne pas me perdre dans toutes ces options syntaxiques et garder un code lisible et cohérent.oic

Alessandro