ProgrammationDéveloppeur iOS

Qu'est-ce qu'un optional en Swift ? Parlez des mécanismes d'extraction sécurisée des valeurs et des pièges typiques liés au travail avec les optionnels.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

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 :

  • Liaison optionnelle :
let str: String? = "hello" if let s = str { print(s) }
  • Liaison Guard:
guard let s = str else { return } print(s)
  • Déréférencement forcé :
let s = str!

(CELA PEUT entraîner un crash à l'exécution si la valeur est nil)

  • Chaînage optionnel :
let length = str?.count
  • Opérateur de coalescence nulle (??) :
let value = str ?? "default"

Question piège.

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

Exemples d'erreurs réelles dues à l'incompréhension des subtilités du sujet.


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.