NEW: Join my free 100 Days of SwiftUI challenge today! >>

Chaînage d'optionnels (Optional chaining)

Travailler avec des optionnels peut parfois sembler un peu maladroit, le déballage et la vérification peuvent devenir tellement pénibles que vous pourriez être tenté d'utiliser des points d’exclamation pour forcer le déballage afin que vous puissiez travailler. Attention cependant : si vous forcez le déballage d'un optionnel qui n'a pas de valeur, votre code va planter.

Swift utilise deux techniques pour rendre votre code moins compliqué. Le premier s'appelle le chaînage d'optionnels, qui vous permet d'exécuter du code uniquement si votre optionnel a une valeur. Entrez le code ci-dessous dans votre Playground pour vous lancer :

func albumReleased(year: Int) -> String? {
    switch year {
    case 2006: return "Taylor Swift"
    case 2008: return "Fearless"
    case 2010: return "Speak Now"
    case 2012: return "Red"
    case 2014: return "1989"
    default: return nil
    }
}

let album = albumReleased(year: 2006)
print("The album is \(album)")

Cela affichera "The album is Optional("Taylor Swift")" dans le volet des résultats.

Si nous voulons convertir la valeur retournée par albumReleased() en lettres majuscules (c'est-à-dire "TAYLOR SWIFT" à la place de "Taylor Swift"), nous pouvons appeler la méthode uppercased() de cette chaîne de caractères. Par exemple :

let str = "Hello world"
print(str.uppercased())

Le problème c'est que albumReleased() retourne une chaîne de caractères optionnelle : elle peut retourner une chaîne de caractères ou ne rien renvoyer du tout. Donc, ce que nous voulons vraiment dire, c'est : "si nous avons une chaîne de caractères en retour, la mettre en majuscules, sinon ne rien faire". Et c’est là que le chaînage d'optionnels entre en jeu, car il prévoit exactement ce comportement.

Essayez de changer les deux dernières lignes de code comme ceci :

let album = albumReleased(year: 2006)?.uppercased()
print("The album is \(album)")

Remarquez qu'il y a un point d'interrogation, c'est le chaînage d'optionnels : tout ce qui suit le point d'interrogation ne sera exécuté que si tout ce qui le précède a une valeur. Cela n'affecte pas le type de données sous-jacent de album, car cette ligne de code renverra maintenant nil ou renverra le nom de l'album en majuscules - il s'agit toujours d'une chaîne de caractères optionnelle.

Vos chaînages optionnels peuvent être aussi longs que vous le souhaitez, par exemple :

let album = albumReleased(year: 2006)?.someOptionalValue?.someOtherOptionalValue?.whatever

Swift les vérifiera de gauche à droite jusqu'à trouver nil, point auquel il s'arrêtera.

L'opérateur nil coalescing

Cette fonctionnalité simple de Swift rend votre code beaucoup plus simple et sûr, et porte pourtant un nom tellement impressionnant que beaucoup de gens en ont peur. C'est dommage, car cet opérateur vous facilitera la vie si vous prenez le temps de le comprendre !

Ce qu'il fait, c'est de vous permettre de dire "utilise la valeur A si tu le peux, mais si la valeur A est nulle (nil), alors utilise la valeur B." C'est tout. C'est particulièrement utile avec les optionnels, car cela les empêche effectivement d'être optionnels car vous fournissez une valeur non optionnelle B. Ainsi, si A est optionnel et a une valeur, elle est utilisée (nous avons une valeur). Si A est présent et n'a pas de valeur, B est utilisé (nous avons donc encore une valeur). De toute façon, nous avons obligatoirement une valeur.

Pour vous donner un exemple concret, essayez d’utiliser ce code dans votre playground :

let album = albumReleased(year: 2006) ?? "unknown"
print("The album is \(album)")

Ce double point d'interrogation est l'opérateur nil coalescing, et dans cette situation, cela signifie "si albumReleased() retourne une valeur, alors assigne-la à la variable album, mais si albumReleased() retourne nil, utilise "unknown" (inconnu) à la place."

Si vous regardez maintenant dans le volet des résultats, vous verrez s'afficher "The album is Taylor Swift" - il n'y a plus d'optionnel. Ceci est dû au fait que Swift peut maintenant être sûr d'obtenir une valeur réelle en retour, soit parce que la fonction en a retourné une, soit parce que vous fournissez "unknown". Cela signifie que vous n'avez rien à déballer et que vous ne risquez pas de faire planter votre code. Vous avez la garantie de disposer de données, ce qui rend votre code plus sûr et plus facile à utiliser.

LEARN SWIFTUI FOR FREE I have a massive, free SwiftUI video collection on YouTube teaching you how to build complete apps with SwiftUI – check it out!

MASTER SWIFT NOW
Buy Testing Swift Buy Practical iOS 12 Buy Pro Swift Buy Swift Design Patterns Buy Swift Coding Challenges Buy Server-Side Swift (Vapor Edition) Buy Server-Side Swift (Kitura Edition) Buy Hacking with macOS Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with Swift Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let us know!