Optional — un type spécial en Swift qui peut contenir une valeur de type T ou ne contenir aucune valeur du tout (nil). Il s'écrit comme T?. Il permet d'indiquer explicitement qu'une variable peut ne pas avoir de valeur, et garantit la vérification de la présence de valeur au moment de la compilation.
Mécanismes d'extraction de valeur :
let str: String? = "hello" if let s = str { print(s) }
guard let s = str else { return } print(s)
let s = str!
(CELA PEUT entraîner un crash à l'exécution si la valeur est nil)
let length = str?.count
??) :let value = str ?? "default"
Peut-on attribuer nil à une variable de type String, et non String?, et que se passera-t-il ?
Réponse :
Non, une variable de type ordinaire (String) ne peut pas se voir attribuer la valeur nil. Seul un optional peut être nil, sinon cela entraînera une erreur de compilation.
Exemple :
var a: String // a = nil // erreur de compilation : Nil cannot be assigned to type 'String' var b: String? b = nil // OK
Histoire
Dans l'application, lors du déréférencement forcé de la valeur, en pensant qu'une réponse correcte viendrait toujours de la base de données, un crash survenait en l'absence de champ. L'erreur a été résolue par une vérification supplémentaire via la liaison optionnelle.
Histoire
Lors de l'envoi de notifications push, le nom d'utilisateur était stocké dans une variable non-optionnelle, ce qui entraînait un plantage de l'application si le nom était vide depuis l'API. Après analyse, le type a été remplacé par un optional et un traitement de nil a été ajouté.
Histoire
Dans un projet, lors du passage d'une valeur optionnelle à une fonction, l'argument avait été déclaré sans type optionnel. Cela a entraîné des bogues cachés et des plantages. Des modifications ont été apportées : le type du paramètre est devenu optionnel et des vérifications de la présence de valeur ont été ajoutées.