Le dessous des Optionnelles en Swift

Comme nous l’avons déjà vu, les Optionnelles en Swift sont une manière élégante et efficace de représenter soit une valeur, soit pas de valeur du tout. Contrairement à ce que l’on pourrait penser les optionnelles sont une construction par dessus le langage Swift et non pas un élément du langage lui même. Laissez nous vous montrer pourquoi.

Tout d’abord allons regarder la définition du type Optional. Pour cela dans Xcode appuyez sur ⌘⇧O, et tapez « Optional ». Voici ce qu’il vous donne (Swift 2.1) :

public enum Optional : _Reflectable, NilLiteralConvertible {
    case None
    case Some(Wrapped)
    
    // ...
}

Comme vous pouvez le voir, nous voyons qu’un type Optional est simplement un enum avec une value associé. Cette valeur a un type (Wrapped), qui est un type générique pour permettre de rendre optionnelle n’importe quoi. La syntaxe ? à la fin d’un type n’est autre q’un sucre syntaxique ajouté au langage pour rendre le code plus concis :

String?
// is equivalent to
Optional<String>

Les enums Swift montrent toute leur puissance ici car nous sommes capable d’implémenter un concept d’assez haut niveau, avec cette construction relativement simple. Maintenant regardons d’un peu plus près l’initialisation des optionnelles.

/// Construct a `nil` instance.
public init()

/// Construct a non-`nil` instance that stores `some`.
public init(_ some: Wrapped)

/// Create an instance initialized with `nil`.
public init(nilLiteral: ())

La première déclaration pour l’initialisation prend pas de valeur, tandis que la deuxième prend en paramètre une valeur. De plus comme les optionnelles adopte le protocole NilLiteralConvertable, nous pouvons aussi initialiser une variable optionnelle avec nil.

Ces trois de ces déclarations signifient la même chose :

let foo          = Optional()
let foo: String? = nil
let foo: String? = .None

De même ceux ci veulent dire la même chose :

let foo          = Optional("Hello")
let foo: String? = "Hello"
let foo: String? = .Some("Hello")

Conclusion

Comme vous pouvez le voir, derrière les optionnelles se cache en réalité une structure relativement simple qui consiste en un enum qui contient ou non une valeur.

1 Etoile2 Etoiles3 Etoiles4 Etoiles5 Etoiles (3 votes, average: 4,33 out of 5)

Loading...

Aucun commentaire

Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.