Paul Hudson @ twostraws 28 mai 2020

Mis à jour pour Xcode 12.5

Le casting de type nous permet de dire à Swift qu’un objet qu’il pense être de type A est en fait de type B, ce qui est utile lorsque vous travaillez avec des protocoles et l’héritage de classe.

Comme vous l’avez vu, les protocoles nous permettent de regrouper des fonctionnalités communes afin que nous puissions partager du code. Cependant, parfois, nous devons aller dans la direction opposée – nous devons pouvoir voir « vous avez un objet qui est conforme à un protocole, mais j’aimerais que vous me laissiez l’utiliser comme un type spécifique. »

Pour le démontrer, voici une hiérarchie de classes simple:

class Person { var name = "Anonymous"}class Customer: Person { var id = 12345}class Employee: Person { var salary = 50_000}

J’ai utilisé des valeurs par défaut pour chaque propriété, nous n’avons donc pas besoin d’écrire un initialiseur.

Nous pouvons créer une instance de chacun d’entre eux et les ajouter au même tableau:

let customer = Customer()let employee = Employee()let people = 

Étant donné que Customer et Employee héritent tous les deux de Person, Swift considérera que la constante people est un tableau Person. Donc, si nous bouclons people, nous ne pourrons accéder qu’au name de chaque élément du tableau – ou du moins nous ne pourrions le faire que si ce n’était pour le casting de type:

for person in people { if let customer = person as? Customer { print("I'm a customer, with id \(customer.id)") } else if let employee = person as? Employee { print("I'm an employee, earning $\(employee.salary)") }}

Comme vous pouvez le voir, cela tente de convertir person d’abord en Customer puis en Employee. Si l’un ou l’autre test réussit, nous pouvons alors utiliser les propriétés supplémentaires appartenant à cette classe, ainsi que la propriété name de la classe parente.

Le casting de type n’est pas spécifiquement mal vu dans Swift, mais je dirais que le casting de type répété peut signifier que vous avez un problème sous-jacent dans votre code. Plus précisément, Swift fonctionne mieux lorsqu’il comprend les données avec lesquelles vous travaillez et qu’un casting de type dit efficacement à Swift: « Je connais plus d’informations que vous. »Si vous pouvez trouver des moyens de transmettre ces informations à Swift afin qu’il les comprenne également, cela fonctionne généralement mieux.

 Le piratage avec Swift est sponsorisé par RevenueCat

SPONSORISÉ Il est difficile de construire et de maintenir une infrastructure d’abonnement intégrée à l’application. Heureusement, il existe un meilleur moyen. Avec RevenueCat, vous pouvez implémenter des abonnements pour votre application en quelques heures, pas en mois, afin que vous puissiez revenir à la création de votre application.

Essayez-le gratuitement

Sponsorisez le piratage avec Swift et atteignez la plus grande communauté Swift au monde!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.