Opérateur de fusion nil
Fait partie de la section Fondamentaux du Journey Swift de Coddy — leçon 14 sur 86.
Parfois, vous souhaitez simplement fournir une valeur par défaut lorsqu'un optionnel est nil, sans avoir à écrire plusieurs lignes de code. L'opérateur de fusion nulle de Swift (??) fait exactement cela : il déballe un optionnel s'il contient une valeur, ou renvoie une valeur par défaut s'il est nil.
let nickname: String? = nil
let displayName = nickname ?? "Guest"
print(displayName) // GuestPuisque nickname est nil, l'opérateur renvoie "Guest" à la place. Si nickname avait une valeur, cette valeur serait utilisée.
let username: String? = "SwiftCoder"
let greeting = username ?? "Anonymous"
print(greeting) // SwiftCoderL'opérateur de fusion nil est parfait pour les instructions sur une seule ligne où vous avez besoin d'une valeur de repli. C'est plus concis que d'écrire une instruction if let lorsque vous voulez simplement remplacer nil par une valeur par défaut. Le résultat est toujours une valeur non optionnelle, vous pouvez donc l'utiliser directement sans déballage supplémentaire.
Défi
FacileÉcrivez une fonction getDisplayName qui prend un username optionnel et un defaultName, puis retourne le nom d'affichage approprié en utilisant l'opérateur de fusion nil (nil coalescing operator).
Si le username est vide (représenté par une chaîne vide ""), traitez-le comme nil et retournez le nom par défaut. Sinon, retournez le username.
Paramètres :
username(String) : Le nom de l'utilisateur (une chaîne vide représente nil)defaultName(String) : Le nom de secours à utiliser
Retourne : Le username s'il n'est pas vide, sinon le defaultName.
Indice : Convertissez le username en un optionnel à l'intérieur de votre fonction — s'il est vide, rendez-le nil. Utilisez ensuite ?? pour fournir la valeur de secours.
Aide-mémoire
L'opérateur de fusion nil (??) déballe un optionnel s'il contient une valeur, ou renvoie une valeur par défaut s'il est nil :
let nickname: String? = nil
let displayName = nickname ?? "Guest"
print(displayName) // GuestSi l'optionnel contient une valeur, cette valeur est utilisée à la place :
let username: String? = "SwiftCoder"
let greeting = username ?? "Anonymous"
print(greeting) // SwiftCoderLe résultat est toujours une valeur non optionnelle, ce qui le rend plus propre que if let pour des scénarios de repli simples.
Essayez vous-même
func getDisplayName(username: String, defaultName: String) -> String {
// Écrivez le code ici
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur ModuloAffectation composéeRécapitulatif - Mathématiques simplesOpérateurs de comparaison7Entrées/Sorties de base
Fonction PrintInterpolation de chaînesSaisie ReadLineConversion de typesRécapitulatif - Jusqu'à 120Récapitulatif - Vrai ou Faux10Fonctions
Déclarer une fonctionParamètres et argumentsValeurs de retourÉtiquettes d'argumentRécapitulatif - Fonction SigmaRécapitulatif - Fonction de validationValeurs par défaut13Itération sur les séquences
Itérer sur les élémentsLa méthode d'énumérationItérer sur les chaînes P1Itérer sur les chaînes P22Variables
Let vs VarAnnotations de typeNombresStringsBooléensConventions de nommageRécapitulatif - Initialiser des variables5Opérateurs, partie 2
Opérateurs logiques, partie 1Opérateurs logiques, partie 2Récapitulatif - Logique simpleOpérateurs logiques, partie 3Opérateur ternaire8Calculateur de partage de facture
Message de bienvenueSaisie des données11FizzBuzz avec une variante
Présentation du jeuLa fonction FizzBuzz3Les Optionnels
Comprendre les optionnelsDéballage avec If LetL'instruction Guard LetOpérateur de fusion nilRécapitulatif - Déballage sécurisé6Prise de décision
L'instruction IfIf - ElseRécapitulatif - Calculatrice simpleL'instruction SwitchSwitch avec des intervalles9Boucles
Boucle For-InBoucle WhileBoucle Repeat-WhileBreakContinueRécapitulatif - FactorielleIntervalles dans les bouclesBoucles imbriquéesRécapitulatif - Entrée dynamique