Les Subscripteurs en Swift

Qu'est-ce que les Subscripteurs ?

Les subscripteurs permettent d'accéder et de modifier des valeurs dans des collections, comme les tableaux ou les dictionnaires. En utilisant des subscripteurs, vous pouvez récupérer ou définir facilement des valeurs dans une classe, une structure ou un énumérateur en passant un index ou une clé, plutôt qu'en utilisant des méthodes spécifiques.

Utilisation des Subscripteurs pour Obtenir et Définir des Valeurs

La syntaxe suivante illustre la façon de récupérer une valeur d'un tableau grâce à la notation de subscripteur, en passant un entier en tant qu'index entre crochets après le nom du tableau. Pour les dictionnaires, il en va de même, en utilisant la clé dans des crochets après le nom du dictionnaire.

array[index]
dictionary[key]

Pour ajouter de nouvelles valeurs, la même notation est utilisée :

array[index] = new value
dictionary[key] = new value

Exemples d'Obtention et de Définition de Valeurs

Regardons un exemple où nous modifions un tableau et l'affichons :

// Déclarer un tableau
var jardinHerbes = ["Aneth", "Lavande", "Persil", "Romarin", "Sauge", "Thym"]
// Remplacer l'élément en position 0 par "Menthe"
jardinHerbes[0] = "Menthe"
// Afficher l'élément en position 0
print(jardinHerbes[0])

Cela donnera la sortie :

Menthe

Un autre exemple montre comment modifier un dictionnaire :

// Déclarer un dictionnaire
var infoJardin = ["nom": "Jardin des Herbes Heureux", "type": "Herbe", "longueur": "1m"]
// Modifier l'élément avec la clé "longueur" à "2m"
infoJardin["longueur"] = "2m"
// Afficher l'élément avec la clé "longueur"
print(infoJardin["longueur"]!)

Note : Le "!" oblige l'optionnel String? à se déballer. Cela affichera :

2m

Création de Subscripteurs

Les subscripteurs sont créés en utilisant le mot clé subscript suivi des paramètres d'entrée (comme un index ou une clé) entre crochets et ensuite le type de retour.

La syntaxe ci-dessous est pour un subscripteur qui peut obtenir et définir des valeurs. Le code pour récupérer la valeur est contenu dans un bloc propriété get {} et le code pour définir la valeur dans un bloc set {} :

subscript(input parameters) -> return type {
    get {
        return the value here
    }
    set(newValue) {
        set the new value here
    }
}

Pour un subscripteur accessible uniquement en lecture, le code pour récupérer la valeur peut être placé directement dans la structure subscripteur, en omettant le bloc get {} :

subscript(input parameters) -> return type {
        return the value here
}

Exemple de Création de Subscripteurs

Voici un exemple définissant un subscripteur en lecture seule dans une structure appelée JardinFleurs :

struct JardinFleurs {
    let fleur: String
    subscript(compte: Int) -> String {
        var fleurs = ""
        if compte > 0 {
            for _ in 1...compte {
                fleurs += fleur
            }
        }
        return fleurs
    }
}

let cerisier = JardinFleurs(fleur: "🌸")
print(cerisier[5])
let tournesol = JardinFleurs(fleur: "🌻")
print(tournesol[3])

Deux instances de JardinFleurs sont créées et la notation de subscripteur est utilisée pour y accéder, affichant le nombre spécifié de fleurs. La sortie sera :

🌸🌸🌸🌸🌸🌻🌻🌻