Swift : les closures

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"
}()

Nathanaël Cherrier

Ingenieur de développement mobile et web pour Econocom. Passionné par le développement en général, mais plus particulièrement par le développement web et mobile, je vous raconte mes petits secrets.

Subscribe to Mindsers IT

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!