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

Opcionales en Swift 3

Prueba ahora LinkedIn Learning sin cargo y sin compromiso.

Prueba gratis Mostrar modalidades de suscripción
¿Qué es un opcional? Es una buena pregunta y aunque no es algo nuevo en el mundo de la programación, es muy importante que conozcas cuál es el objetivo de esta característica que nos va a permitir controlar mejor nuestra lógica.

Transcripción

Los opcionales son un tipo de referencias que nos van a permitir apuntar a valores que puedan ser nulos o puedan estar completamente construidos. ¿Cómo qué? Bueno, por ejemplo, en este caso "STR" es de tipo "String". ¿Cómo lo puedo saber? Bueno, pues, si yo escribo aquí: "Type of:STR", voy a ver de mi lado derecho que va a decir "String.Type". Esto me va a indicar que la cadena o la referencia "STR" está apuntando a un "String". No puede ser "Nill". ¿Por qué no puede ser "Nill"? Bueno, pues, muy sencillo. Aunque yo tengo aquí una variable "STR", yo la puedo apuntar a "Nill" y me va a arrojar un error. Este error me va a indicar que "STR" no puede apuntar o no puede ser referencia a un "Nill" porque ya tiene un tipo definido. Ahora, ¿cuál es la ventaja de esto? La ventaja es muy simple. Si tú tienes un objeto de un tipo que no puede ser "Nill", entonces, no hay necesidad de estar preguntando si la cadena está llena o si vas a tener una asignación a un apuntador de nulos o a un apuntador de "Nill". Esto nos va a ayudar muchísimo a la hora de estar controlando nuestros flujos. Por ejemplo, si yo tengo aquí "STR" y le aplico el método "Uppercase", lo que va a hacer es que va a transformar esta variable y me va a regresar el mismo valor pero en mayúsculas. Lo que quiero que notes aquí es lo siguiente, si yo me voy aquí al final del nombre de mi método y presiono la tecla "Escape", me va a arrojar la ayuda. Y la ayuda me va a decir qué tipo es. Me va a decir: "Ok, este es un método, por eso la 'M' que regresa un 'String', su nombre es 'Uppercase', y hay una variante de 'Uppercase' que recibe un parámetro 'Width' que es un local". Esto es muy importante porque quiere decir que entonces esto es un "String". Viene completamente lleno. ¿En qué casos no puede venir lleno? Bueno, muy sencillo. Por ejemplo, yo aquí ya tengo un pequeño arreglo que yo escribí, pero lo más importante es qué sucede si yo quiero pedir algún elemento que no sepa o no esté seguro si existe o no. Bueno, pues, lo que tengo que hacer aquí es: "/first=array.", y voy a escribir "first". Si te fijas, aquí me dice: "Ok, te voy a regresar un valor". Ese valor va a ser de tipo entero con un signo de interrogación. Cuando veas el signo de interrogación, significa que es un opcional. ¿Ok? Muy bien. Entonces, "first" en realidad es cero. Recuerda que en el "playground", estás en tiempo de ejecución. ¿Por qué? Porque lo que está haciendo constantemente el "Playground" es ejecutar tu código. Así que muchas de las cosas que aquí se resuelven como este cero, en tiempo de compilación no lo sabes, y, por eso, necesitas resolverlo. Sobre todo con los tipos. Manejar los tipos en el "Playground" es muchísimo más sencillo que si los estuvieras manejando ya en un proyecto de Mac o de iOS. Pero bueno, ese es otro tema. ¿Cuál es el problema aquí? Bueno, el problema aquí es que "first" te regresa a un opcional porque no sabe qué es lo que hay adentro hasta que se ejecuta el programa. Imagina que tú tuvieras un arreglo vacío, y este arreglo vacío —vamos a comentar esta línea— no sabe qué es lo que existe. Entonces "First" lo que va a regresar es "Nill". Esto significa que "First" es de tipo entero —porque yo se lo estoy indicando aquí en el arreglo— pero no sabe que el contenido de ese arreglo está vacío. O que, al menos, el índice que le estoy pidiendo está vacío. Si yo le pregunto aquí: "oye, por favor, dime cuál es el tipo de 'First'", me va a regresar: "Ah, mira, es un opcional que adentro puede tener un genérico de tipo 'Int'". Esto concuerda perfectamente con nuestra definición de nuestro arreglo. Ahora revisemos un ejemplo un poco más elaborado. ¿Cuáles son las ventajas de poder enviar y recibir opcionales a través de nuestras funciones? Por ejemplo, aquí yo tengo este mensaje que va a recibir un número que es un entero. No le puedo pasar un "Nill". ¿Por qué? Porque solamente recibe enteros. Y este entero va a regresar una cadena. Así que, yo simplemente hago la referencia a "number", y cuando yo esté utilizando "First", va a poder ejecutarse. Aquí parece que hay un error. Ok. Ah, cierto. Tengo que comentar esta línea porque el arreglo viene vacío. Muy bien. Esto lo hace el "Playground" porque estamos en tiempo de ejecución. Muy bien. Entonces, aquí "First" es de tipo entero. Y este entero es opcional. Entonces para poder desenvolverlo necesito colocar el signo de admiración o "Bang" para que pueda desenvolverlo y ser un entero. Ahora, cada que tú haces esto puedes tener errores en tiempo de ejecución. ¿Por qué? Porque, simplemente, si mensaje recibe un entero, pero "First" es "Nill", cuando llegue aquí va a haber un "Crash" que va a poder cerrar tu aplicación. Entonces, ten mucho cuidado. Es muy sencillo, nada más es cuestión de que tengas muchísimo cuidado o que hagas una evaluación para saber si lo que estás haciendo referencia es válido o no. Otra cosa que es muy importante es que también los puedes regresar. Le puedes decir: "Ah, mira, voy a tomar un opcional y voy a regresar un opcional". —de cualquier tipo, no solamente de enteros, también pueden ser de arreglos de diccionarios, de fechas, de "Uid", de lo que tú quieras. Puedes hacer opcionales de todo. Solamente ten cuidado cada vez que estés desenvolviendo y envolviendo en opcionales. Y si te fijas, aquí yo lo que tengo que hacer es desenvolver "number" para poder imprimir el número que estamos haciendo referencia. Si yo le quitara aquí el signo de admiración, lo que estamos haciendo es hacer referencia al opcional de un entero. Y por eso saldría esta palabra. Si yo lo coloco, simplemente, lo va a desenvolver y va a imprimir el valor tal cual es. También es muy importante que revises cómo funcionan los "Ward". Las Wards son básicamente sentencias que te van a permitir continuar o no con tu ejecución. Esta Ward, en especifico, lo que dice es: "Oye, asegúrate que 'number' no sea 'Nill'!. ¿Por qué? Porque más adelante lo voy a desenvolver. Y si es "Nill", entonces regresa a "Nill" que es lo que estamos permitiendo con este opcional. Es muy sencillo. Por ejemplo, si yo aquí cambiara de "First" a "Nill", simplemente todo se vuelve "Nill" y no hay ningún "Crash". Los opcionales son muy, muy poderosos en Swift y te sugiero que los ocupes con muchísima responsabilidad.

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.