Optionnels en Swift
Introduction aux optionnels
En Swift, les optionnels sont des types utilisés pour gérer l'existence potentielle ou l'absence d'une valeur. Contrairement à une variable non optionnelle qui ne peut pas être mise à nil, un type optionnel peut être défini en ajoutant un point d'interrogation ?
à la déclaration de type.
Syntaxe des optionnels
Voici comment créer une variable optionnelle. Par exemple, une variable nommée maVariable
peut être définie comme suit :
var maVariable: Type?
var maVariable: Optional
Ici, Type
représente un type de données en Swift. Cette variable peut contenir soit une valeur valide de ce type, soit nil
.
Déballer les optionnels
Le déballage des optionnels ne doit être effectué que si vous êtes certain qu'une valeur est présente, sinon un erreur se produira. Voici quelques méthodes pour déballer les optionnels.
Opérateur de coalescence nulle
L'opérateur de coalescence nulle ??
permet d'assigner une valeur par vérification de gauche à droite. Si les valeurs précédentes sont nil
, une valeur par défaut à droite est assignée. Dans l'exemple suivant, peutEtreEntier
est déclaré comme un type entier optionnel et est initialisé à nil
, donc monInt
sera assigné à 27 :
var peutEtreEntier: Int? = nil
var monInt = peutEtreEntier ?? 27
print(monInt) // Affiche : 27
La structure if let
L'instruction if let
est un contrôle de liaison optionnel. Dans cet exemple :
var peutEtreChaine: String? = "peutEtreChaine"
if let maChaine = peutEtreChaine {
print("\(peutEtreChaine) et maChaine sont égales!")
} else {
print("maChaine n'a pas pu être assignée à nil.")
}
// Affiche : Optional("peutEtreChaine") et maChaine sont égales!
La variable maChaine
est déclarée et liée conditionnellement à l'optionnel peutEtreChaine
. Sa valeur est accessible à l'intérieur du bloc if
, mais pas en dehors.
La structure guard let
guard let
est une autre structure de liaison optionnelle qui peut être utilisée au sein d'une fonction. Par exemple :
var peutEtreInt: Int? = 2022
func trouverInt() {
guard let monInt = peutEtreInt else {
return
}
print(monInt)
}
trouverInt() // Affiche : 2022
Si la variable optionnelle peutEtreInt
a une valeur, elle sera assignée à monInt
. Sinon, le bloc else
sera exécuté.
Déballage forcé
Utiliser l'opérateur !
après une variable optionnelle permet de forcer le déballage de sa valeur :
var peutEtreInt: Int? = 27
var monInt: Int = peutEtreInt!
print(monInt) // Affiche : 27
Cela peut aussi être fait de manière implicite :
var monInt = peutEtreInt!
print(monInt) // Affiche : 27