
Un type optionnel est une « boite » qui permet de faire abstraction de son contenu. C’est quand on l’ouvre que l’on découvre si il y avait quelque chose dedans ou non.
// Défini un dictionnaire prénom/âge
let ages: [String: Int] = ["anne": 19, "jean": 32, "pierre": 24]
// Récupère l'âge de mathieux
let ageMathieux: Int? = ages["mathieux"]
// Si la "boite" contient une valeur
if ageMathieux != nil {
// On utilise ! pour "ouvrir" la boite
print("Mathieux a \(ageMathieux!) ans")
}
else {
print("L'âge de Mathieux n'est pas défini")
}
Enchainement d’option
Les optionnelles prennent tous leur sens lorsque l’on a besoin de chainer les appels de propriété, méthode ou de subscripts. Si l’option contient une valeur alors l’appel va réussir tandis que si l’option est nulle la valeur de retour sera nulle elle aussi. On peut chainer comme ça plusieurs appels en une seule fois, ce qui permet de réduire considérablement le niveau de if imbriqué à écrire. Voici un petit exemple d’enchainement d’option :// Défini une liste de prénom
let prenoms: [String] = ["anne", "jean", "pierre"]
if let prenom = prenoms[10]?.uppercaseString {
print("\(prenom)")
}
else {
print("Aucun prénom en 11 ème position")
}
// Affiche "Aucun prénom en 11 ème position"
Fondamentalement, l’enchainement d’option retourne une option contenant la valeur de l’opération que vous faites. Cela simplifie la lecture du code et permet par la même occasion de réduire les erreurs possibles.