devstory

Le Tutoriel de Swift Closure

  1. Qu'est-ce que Closure?
  2. Fonction avec Closure
  3. La clôture anonyme
  4. Des valeurs de retour implicites
  5. Clôture dans une fonction

1. Qu'est-ce que Closure?

Closure: Closure est un bloc spécial. Il peut obtenir éventuellement des paramètres et un type de retour.
Il est presque similaire comme un bloque dans C ou Object-C.
Afin de simplifier, vous pouvez observer la déclaration suivante. Pourriez- vous déviner sa signification?
La déclaration dessous peut être décryptée par l'illustration suivante:
C'est une syntaxe pour déclarer les variables avec le type de données et lui assigner des valeurs avec lesquelles vous êtes familier.
MyFirstClosure.swift
import Foundation

// Déclarez la variable myVar1, avec le type de données, et assignez la valeur.
var myVar1 : () -> () =  { 
    print("Hello from Closure 1");
} 
// Déclarez la variable myVar2, avec les types de données, et assignez une valeur.
var myVar2 : () -> (String)  = { () -> (String) in 
    return "Hello from Closure 2" 
} 
// Déclarez la variable myVar3, avec les types de données, et assignez la valeur.
var myVar3 : (Int, Int) -> (Int)  =  { (a : Int, b: Int) -> (Int) in 
    var c : Int =  a + b 
    return c
}  
func test_closure()     { 
    // Exécutez de la fermeture (Closure).
    myVar1() 
    // Exécutez de la Closure et obtenir la valeur de retour.
    var str2 = myVar2() 
    print(str2) 
    // Exécutez de la Closure, passez (pass) les paramètres
    // et obtenez une valeur de retour.
    var c: Int =  myVar3(11, 22) 
    print(c) 
}
Closure est un bloque qu'il peut-être comprendre des paramètres et la type de retour.
Syntaxe de Closure:
{  (parameters) -> returntype in
     // statements
}

2. Fonction avec Closure

Function est un cas particulière de Closure. Function est une Closure nommé ou peut-être dire que la Closure est une Function anonyme.
Définition:
Usage:

3. La clôture anonyme

Quand déclarer Closure, il n'est pas nécessaire d'écrire le nom des paramètres. Ces paramètres peuvent être références par $0, $1,...
AnonymousClosure.swift
import Foundation

// Déclarez une Closure de la manière habituelle.
var myClosure : (String, String) -> String 
    = { (firstName: String, lastName: String) -> String in  
        return firstName + " " + lastName
} 
// Déclarez une Closure de manière anonyme (anonymous).
// (Ignorez les noms de paramètres).
var anonymousClosure : (String, String) -> String 
    = {
        // En utilisant
        // $0: Pour le premier paramètre
        // $1: Pour le deuxième paramètre.
        return $0 + " " + $1
}
Note: $0, $1,... sont des paramètres anonymes. Ils sont uniquement utilisés dans l'anonymat Closure. Si vous utilisez le Closure normal, vous recevrez un message d'erreur:
Anonymous closure arguments cannot be used inside a closure that has explicit arguments
Par exemple, avec l'anonymat Closure (2):
AnonymosClosure2.swift
import Foundation 

func test_anonymousClosure()  { 
    // Déclarez une variable du type de Closure.
    var mySum : ( Int, Int ) -> (Int)
    
    // Assignez une Closure annonyme pour lui.
    // $0: Pour le premier paramètre
    // $1: Pour le deuxième paramètre.
    mySum =  {
        return $0 + $1
    } 
    var value = mySum(1, 2) 
    print(value) 
}

4. Des valeurs de retour implicites

Si dans le contenu de Closure, il y a une seule expression, vous pouvez omettre le mot- clé return.
ImplicitReturnValues.swift
import Foundation

// Ceci est une Closure dont le contenu a une seule expression
var closureWithReturn  =  { (a: Int, b: Int) -> Int in 
    // Une expression (expression) unique.
    return a + b 
} 
// Peut omettre le mot-clé 'return'.
var closureWithoutReturn =  { (a: Int, b: Int) -> Int in 
    // Si seulement une seule expression.
    // Omettre le mot clé 'return'.
    a + b 
}

5. Clôture dans une fonction

  • TODO