Swift : les closures

Cet article est libre d'accès pour tous grâce à ceux qui soutiennent notre blog indépendant.

Une des fonctionnalités utile, pratique et belle que nous apporte Swift est la possibilité de faire des closures.Vous en avez surement déjà entendu parler, dans les autres langages on appelle ça des fonctions de callback ou encore fonctions anonymes.

Les closures c’est la possibilité de passer une fonction en paramètre d’une autre fonction. Par exemple, en JavaScript ça donne :

voiture.on('stop', function() {
	console.log('Voiture is stoped');
});

Comme vous le voyez cette fonction n’a pas de nom : pas besoin puisqu’on ne l’appelle qu’une seule fois dans le code. Pourquoi callback ? Parce que la fonction que vous passez à la première fonction va être « rappellée » par celle-ci lorsqu’elle en a envie.

L’intérêt est d’ajouter une certaine modularité et fléxibilité à votre code. Les instructions que la fonction va executer (ou rappeller) ne sont pas connues lors de l’écriture de cette fonction (cf. image d’entête).

Et en Swift ça ressemble à quoi ?

En swift le même exemple ressemblerait à ça :

// Ecriture classique 
voiture.on('stop', {
	print('Voiture is stoped')
})

// Ecriture moderne : si la closure est le dernier argument de la fonction 
voiture.on('stop') {
	print('Voiture is stoped')
}

On utilise pas le mot-clé func et on ne nomme pas la fonction, la syntaxe est plutôt simple. Mais si notre closure doit prendre des valeurs en paramètre ?

voiture.on('stop') { (v: String) -> Void in
	print("text : (v)")
}

Voilà, vous savez comment utiliser les closures en Swift. Maintenant, comment écrire une fonction qui prend en paramètre une closure ?

Une fonction qui prend en paramètre une closure ce n’est qu’une fonction qui prend en paramètre une autre fonction. Si vous avez compris ça, vous avez compris le code ci-dessous :

func on(event: String, closure: () -> Void) -> String { 
	// code 
	closure() 
	// code 
}

Astuce

var s: String = {
	// code 
	return "it's a string"
}()

Rejoins 250+ développeurs de notre liste de diffusion et sois reçois les articles directement dans ta boite mail.

S'inscrire à la newsletter

Aucun spam. Désabonnes-toi en un seul clic à tout moment.

Si vous avez des questions ou des remarques/conseils, n'hésitez pas à laisser un commentaire plus bas ! Je serais ravis de vous lire. Et si vous aimez l'article, n'oubliez pas de le partager avec vos amis.