Paul Hudson @twostraws 28 de mayo de 2020

Actualizado para Xcode 12.5

Type casting nos permite decirle a Swift que un objeto que cree que es de tipo A es en realidad de tipo B, lo que es útil cuando se trabaja con protocolos y herencia de clases.

Como ha visto, los protocolos nos permiten agrupar funciones comunes para que podamos compartir código. Sin embargo, algunas veces necesitamos ir en la dirección opuesta, necesitamos poder ver «tienes un objeto que se ajusta a un protocolo, pero me gustaría que me dejaras usarlo como un tipo específico.»

Para demostrar esto, aquí hay una jerarquía de clases simple:

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

He utilizado valores predeterminados para cada propiedad, por lo que no necesitamos escribir un inicializador.

Podemos crear una instancia de cada uno de ellos y agregarlos al mismo array:

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

Dado que tanto Customer como Employee heredan de Person, Swift considerará que people constante es un array Person. Por lo tanto, si hacemos un bucle en people, solo podremos acceder a name de cada elemento en la matriz – o al menos solo podríamos hacerlo, si no fuera por el tipo de fundición:

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)") }}

Como puede ver, intenta convertir person primero a Customer y luego a Employee. Si cualquiera de las pruebas pasa, podemos usar las propiedades adicionales que pertenecen a esa clase, así como la propiedad name de la clase padre.

El casting de tipo no está específicamente mal visto en Swift, pero diría que el casting de tipo repetido podría significar que tiene un problema subyacente en su código. Más concretamente, Swift funciona mejor cuando comprende los datos con los que está trabajando, y una transmisión de tipos le dice de manera efectiva a Swift: «Conozco más información que usted.»Si puede encontrar formas de transmitir esa información a Swift para que también la comprenda, por lo general funciona mejor.

 Piratear con Swift está patrocinado por RevenueCat

PATROCINADO Construir y mantener la infraestructura de suscripción en la aplicación es difícil. Por suerte hay una manera mejor. Con RevenueCat, puede implementar suscripciones para su aplicación en horas, no meses, para que pueda volver a crear su aplicación.

Pruébalo gratis

Patrocina Hacking con Swift y llega a la comunidad Swift más grande del mundo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.