Revenir

Entre ton email pour recevoir le guide complet pour apprendre Swift peu importe ton niveau

Convertir des types en Swift

Nous allons parler de la différence entre les déclarations as, as? et as!

Je me souviens avoir été extrêmement confus avec cette synthaxe quand j’apprenais Swift.

Je me disais:

Mais pourquoi faire 3 mot-clés différents pour faire la même chose ?

Pendant très longtemps, je n’ai pas été capable de décider lequel je devais utiliser dans une situation donnée

Mon but est de vous aider à décider lequel choisir en fonction du contexte.

Le mot-clé ‘is’

Avant que nous puissions commencer à parler des différents as, vous devez savoir quelle est la différence avec le mot-clé is.

Ce mot-clé vérifie simplement si la variable est d’un certain type ou non et retourne un booléen.

Par exemple:

let test = "teeest"

if test is String {
    print("test est une string")
}

Vous pouvez (et vous devriez) l’utiliser pour vérifier le type d’une variable mais pas pour la convertir.

As, As? et As!

Les instructions as sont utilisées pour convertir une variable (cast en anglais).

Le mot-clé as le plus simple est un ancien. Vous pouvez toujours l’utiliser lorsque vous l’utilisez sur les types primitifs (String, Int, Float…) ou convertir les types Objective-C en types Swift.

Le problème est que vous ne pouvez l’utiliser que lorsque la source et la destination sont convertibles l’une vers l’autre, sinon vous obtiendrez une erreur.

Et on tu veux forcer la converstion ?

Et si la source et la destination ne sont pas convertibles l’une vers l’autre ?

Et si le résultat peut produire une erreur ?

Eh bien, voilà pourquoi as? et as! ont été créés!

La principale différence avec le simple as est qu’ils retournent des types optionnels.

Ce qui signifie que as? déballe implicitement le résultat de la conversion et que as! force le déballage du résultat de la conversion.

Vous devriez éviter d’utiliser as!

Tout simplement parce que si pour une raison quelconque le résultat de la conversion est nul, le code entier plantera.

Si vous êtes sûr à 100% que vous pouvez convertir votre variable dans le type désiré et qu’elle ne produira aucune erreur, alors vous pouvez l’utiliser mais je ne le recommande toujours pas.

La façon la plus sûre de lancer une variable est d’utiliser l’instruction as?

Le résultat de la converstion avec l’instruction as? sera un optionnel: nil ou une valeur du type désiré.

Vous devrez ensuite déballer la valeur de manière sécurisée pour l’utiliser.

Si vous utilisez l’instruction as?, voici la façon la plus sûre de convertir et de déballer le résultat:

if let casted = myVariable as? myType {
    // fais quelque chose
}
else {
    // afficher un message d'erreur
}

Dans une vraie application, vous devriez toujours éviter de laisser des potentielles erreurs arriver.

Il faut donc éviter as! au maximum même si ça rajoute quelques lignes de code!

C’est tout pour cet article, j’espère qu’il a été utile et que vous avez appris quelque chose !