Formation PUB900 : Développer une application pour iPhone avec SwiftUI, H-2024 Le langage Swift (référence)

61.5 Liaison optionnelle (if let / guard let)


Lorsqu'on travaille avec des optionnels, les instructions if let et guard let, qui utilisent le mécanisme de liaison optionnelle (en anglais : optional binding) permettent d'écrire du code élégant et efficace.

Il s'agit de raccourcis pour utiliser une variable optionnelle de façon sécuritaire. Ils permettent d'exécuter une section de code seulement lorsque la variable ne contient pas la valeur nil.

Voyons comment fonctionnent ces instructions.

if let

Prenons l'exemple d'une structure Personnage qui contient une propriété optionnelle nommée batailles

Sans opérateur de liaison optionnelle, si on veut afficher le nombre de batailles d'une instance nommée personnage, on pourrait procéder comme suit :

SwiftUI

if personnage.batailles != nil {
  Text("Le personnage \(personnage.nom) s'est battu \(personnage.batailles!.count) fois jusqu'ici.")
}
else {
  Text("Le personnage \(personnage.nom) n'a livré aucune bataille à ce jour.")
}

Remarquez l'utilisation de l'opérateur de déballage forcé (!) qui est requise puisque la propriété batailles est déclarée en tant que valeur optionnelle.

Le même résultat pourrait être obtenu à l'aide de l'opérateur de liaison optionnelle sans nécessiter le déballage de la propriété optionnelle.

Cet opérateur permet de copier la valeur d'une variable dans une variable locale. Dans le cas où elle a la valeur nil, le code du else sera exécuté.

SwiftUI   

if let batailles = personnage.batailles {
  Text("Le personnage \(personnage.nom) s'est battu \(batailles.count) fois jusqu'ici.")
}
else {
  Text("Le personnage \(personnage.nom) n'a livré aucune bataille à ce jour.")
}

Vérifier plusieurs conditions dans le if let

Il est possible de combiner plusieurs conditions dans un if let.

Par exemple, on pourrait vérifier si un tableau optionnel n'est pas à nil et qu'il n'est pas vide.

Il suffit de séparer les conditions par une virgule.

SwiftUI

if let batailles = personnage.batailles, batailles.count > 0 {
  Text("Le personnage \(personnage.nom) s'est battu \(batailles.count) fois jusqu'ici.")
}
else {
  Text("Le personnage \(personnage.nom) n'a livré aucune bataille à ce jour.")
}

guard let

L'instruction guard let est généralement utilisée dans une fonction.

Elle permet de sortir rapidement de la fonction lorsque l'expression est évaluée à nil.

Swift

func faireQuelqueChose(personnage: Personnage) {
  guard let batailles = personnage.batailles else {
    print("Le personnage \(personnage.nom) n'a livré aucune bataille à ce jour.")
    return   // sort de la fonction
  }

  // le code qui suit est exécuté seulement si personnage.batailles a une valeur non-nil
  ...
}

Pour plus d'information

« Optionals and Unwrapping in Swift ». Swift anytime. https://www.swiftanytime.com/blog/optionals-and-unwrapping-in-swift

« if let shorthand for unwrapping optionals ». Hackink with Swift. https://www.hackingwithswift.com/swift/5.7/if-let-shorthand

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre