El 14 de septiembre de 2017, publicamos una versión revisada de nuestra Política de privacidad. Tu uso continuado de video2brain.com significa que aceptas este documento revisado, por lo que te recomendamos que dediques unos minutos a leerlo y comprenderlo.

Aprende Swift 3

Tipos y casting

Prueba ahora LinkedIn Learning sin cargo y sin compromiso.

Prueba gratis Mostrar modalidades de suscripción
A diferencia de Objective-C, Swift tiene tipos y es muy importante cuándo y cómo aprovechar el Casting de variables. Aquí revisaremos la inferencia de tipos y la transformación de referencias a valores con downcasting.

Transcripción

Ahora, hablaremos del sistema de tipos que tiene Swift 3. El sistema de tipos de Swift 3 se basa completamente en inferencias. ¿Cómo funciona esto? Muy sencillo, todos los tipos que están expresados en Swift, aunque no los escribas, los infiere. Los infiere por el tipo de retorno de las funciones, de los constructores, de las clases o variables o incluso a qué hacen referencia. Por ejemplo, aquí no necesito decirle que "str" es de tipo string. Ya lo sabe, porque tiene explícitamente escrito cual es su valor. Ahora, el tema con los tipos es que es muy importante que sepas cómo moverte a lo largo de todo el sistema de tipos de Swift. Por ejemplo, aquí ya tengo dos clases definidas, una es "animal" y la otra es "pet." "Animal" no permitirá definir un conjunto de piernas. ¿Cuántas piernas tiene? Cuatro y si una mascota tiene un dueño. "Animal" no necesita implementar el método de si tiene dueño o no. Asi que no hay ningún problema. El tema viene en la herencia. Si ves, aquí la clase "pet" hereda de "animal." Por lo tanto, "pet" tiene una propiedad que se llama legs y que es igual a cuatro. Veamos, aquí estoy haciendo referencia a mi perro y construyo una instancia de "pet". Entonces, mi perro tendrá cuatro piernas o cuatro patas. ¿Qué pasa si hago una referencia o una instancia nueva a un animal? Lo que tengo aquí es que un animal es un perro, pero este perro lo tomaré como si fuera una referencia a un animal. Esto siempre va a funcionar, ¿por qué? Porque por definición, "my dog," es de tipo pet, y pet es de tipo animal. Aqui el "as" siempre va a funcionar, no hace falta que lo coloques ningún símbolo especial. Incluso el compilador te lo dirá, este casting es hasta innecesario porque solo le estás agregando funcionalidad o quitándosela. Si te fijas, un animal puede tener el número de patas y también my dog puede hacer referencia al método "has owner." El tema es que "an animal" no tiene el método "has owner". Esa es la principal diferencia, no puedes acceder a métodos que están definidos en pet, porque tu referencia, "an animal" en realidad es de tipo animal. Incluso, si lo escribo, me da un error en tiempo de compilación porque no es una referencia válida de la instancia o del tipo animal. Vamos a comentar esto. ¿Cómo podemos hacer referencias y hacer este tipo de "downcasting"? Bueno, aquí copio un ejemplo un poco más grande, aquí está, donde defino un clase hermana de "pet" que es "wild," básicamente quiero hacer referencia entre domesticados y los que no lo son. Imagina esto, si tiene dueño, pues no, este no tiene dueño, pero necesito una colección de ellos, donde algunos serán animales, otros mascotas y otros animales salvajes. Lo importante es que, aquí, necesito definirle que este arreglo en realidad está lleno de eñes; puede ser ene o eñe object, como estoy aquí construyendo este sistema podrá ser ene o eñe object, pero lo importante es que sepas que la colección no debe saber qué es lo que hay dentro. Si pusiera "as animal", todos los que están aquí tendrían que estar cumpliendo con la interface de animal. Lo voy a poner como eñe, para poder hacer el downcasting que necesito hacer para el ejemplo. ¿De qué tipo es el elemento que está en el índice cero? Es de tipo animal y lo puedo preguntar sin problema. El tema con los tipos es que puedes preguntar en tiempo de ejecución cúales son sus valores. Por ejemplo, ¿animal es de tipo animal? Sí. Vamos a cambiarlo. ¿La referencia de tipo animal es de tipo pet o no ? Me dice es de otro tipo. Con la palabra reservada "is" es como hago la pregunta de si una referencia —en este caso la referencia es animal— es de tipo x, animal o tipo pet. Lo importante que identifiques es cómo puedes estar haciendo esas preguntas. Si fueran estructuras, tienes que hacer la pregunta directamente a la estructura, pero cuando son clases u objetos puedes hacer la pregunta desde la clase hasta sus superclases. Por otro lado, puedes tomar colecciones y los elementos dentro de las colecciones y hacerles el casting cómo necesites. Por ejemplo, me traigo el último elemento de la colección que sé que es un "wild," el tiempo de ejecución lo sabemos, el playground lo sabe, pero cuando estas programando; te darás cuenta de que en tiempo de compilación no lo va a saber. Entonces, "wild," lo transformo como un tipo "wild" de nuestro sistema, pero le pongo "as" con signo de interrogación. ¿Esto qué hace? Esto lo hace muy sencillo y seguro. Me trae el último elemento como "wild", pero si falla, si por alguna razón el último elemento no es de tipo "wild", me regresa un opcional de tipo wild; entonces, "wild" va a ser "nil". Si este casting falla, esto me va a regresar "nil". ¿Cómo puedo utilizar este casting? Sencillo, wild, signo de interrogación, punto, has owner, no, no tiene. Y puedo hacer el mismo casting forzado. Eso no te lo recomiendo, pero lo puedes hacer. Basicamente si el último elemento de la colección no es de tipo wild, habrá un "crash". Puedes capturarlo o no pero habrá un "crash" que cierre el programa. Por otro lado si aquí cambio de "wild " a "pet", ves, aqui es donde está el error en tiempo de difusión, esto no puede funcionar. Sin embargo, aquí no hay problema porque wild es nil. Voy a comentar esto. Y si te fijas, aquí ya no fallo, simplemente no se regresa nil y todo sigue correctamente. Este es el sistema de tipos de Swift, si te fijas es muy importante que sepas cómo identificar y cambiar estos tipos y clases para tus referencias, ya sean una referencia de estructura o una referencia de una clase.

Aprende Swift 3

Descubre Swift 3, la versión más actual del lenguaje de Apple; conoce todas sus novedades y aprende el lenguaje de código abierto desde cero para desarrollar tus aplicaciones.

3:14 horas (31 Videos)
Actualmente no hay comentarios.
 

Este curso video2brain está disponible como descarga y para ser visualizado online. ¡Pero no hace falta que decidas entre las dos opciones! Al comprar el curso, disfrutarás de ambas posibilidades.

La descarga te permite ver las lecciones sin estar conectado/a a internet y supone una navegación fácil y ágil entre capítulo y capítulo. Si vas a trabajar en diferentes ordenadores o si no quieres descargarte el curso completo, entra en la web con tus datos de acceso y disfruta directamente de tus vídeos online. Te deseamos que disfrutes de este curso y te resulte de mucha utilidad.

Estamos a tu disposición si tienes cualquier tipo de duda o pregunta.