Hola, mi nombre es Mark Nair y en estas lecciones aprenderá sobre valores opcionales, el operador coalescente nulo usando if let y usando guard let. En Swift podemos definir nuestras constantes y nuestras variables pero no tenemos que darles un valor al principio. Solo tenemos que darles el valor cuando lo usamos. Pero si no hacemos eso, tenemos que darles un tipo. Vamos a ver. Si solo digo let name, Swift dirá, "No sé de qué estás hablando, la anotación de tipo que falta en el patrón es el error". Así que tengo que hacer algo al respecto. Tengo que darle un tipo. Lo mismo aqui. Si tengo un número, mismo problema, y luego podemos salirnos con la nuestra. Pero realmente no podemos usarlo todavía. Si tratamos de usarlo, tenemos un problema. No hemos inicializado el valor. A diferencia de otros idiomas, variables y constantes en Swift no obtenga ninguna inicialización al principio automáticamente. Eso es común en otros lugares, pero no en Swift. Swift se trata de cómo usamos las cosas de manera muy segura. Y si tiene un valor predeterminado incorporado automáticamente, es posible que tenga problemas más adelante. Por ejemplo, si el nombre fuera el valor predeterminado de solo una cadena vacía, y más adelante si estamos accediendo al valor de nombre y nos hemos olvidado o no le hemos dado ningún valor a nosotros mismos, solo obtendremos esto y no imprimiremos nada. Bueno, en realidad solo estamos imprimiendo una cadena vacía. Hay algo de valor allí. Así que Swift toma el camino contrario, dice: "Será mejor que sepas lo que estás haciendo". Será mejor que me des un valor seguro". Sin embargo, hay momentos en que no tener valor tiene sentido. Entonces, por ejemplo, digamos que eres un cantante. Eres un cantante mundial famoso, tu nombre es Sting. Sting no tiene apellido, sin incluir su nombre real todavía. Pero digamos que Sting está usando una de sus aplicaciones, dice: "¿Cuál es tu nombre de pila? ¿Cual es tu apellido?" Sting dice: "No tengo apellido". ¿Qué harás despues? Entonces podríamos tener, pero entonces que pasa? Bien, soy Sting, soy firstName. Hay algo en Swift sin valor. Si usó un valor predeterminado de una cadena vacía, El nombre de Sting sería Sting cadena vacía. Ese no es realmente el nombre, es solo Sting. Así que tenemos en Swift algo llamado opcional. Y un valor opcional es exactamente lo que dice. Es una cosa opcional que tiene un valor en ella o no tienes valor. Y ningún valor significa cero, que es una palabra especial en Swift. Ahora, la forma en que distinguimos que es después del tipo que usamos un signo de interrogación. Y piénsalo así. Hay un valor, no sé, es una pregunta. Así que el apellido no tiene valor. Ahora, solo porque es una opción significa que todavía necesita tener un tipo. En este caso, el apellido es de tipo cadena opcional. No significa que sea solo un opcional, sigue siendo un tipo. Y cuando no hay nada ahí, el valor es cero. Entonces, los opcionales pueden o no tener un valor. Usamos este signo de interrogación para agregarlo para distinguir eso. Así que vamos a hacer esta función. Entonces getLycanthropeStatus devuelve una cadena y es sólo una función muy simple. Y si lo ejecuto, todo lo que obtendremos es el valor de retorno del hombre lobo. Vale, ese es el estado, eres un hombre lobo. Ahora vamos a cambiar la función. ¿Y qué si alguien no es un hombre lobo? y no son nada. No es un hombre lobo y no un no hombre lobo, es solo una nada. Así que voy a hacer que este sea el valor de una cadena opcional. Así que ahora cambiemos la función para darnos algún tipo de condicional. Ahora llamaré a la función. Cuando la luna es, cuando es luna nueva entonces el valor es cero. Pero cuando la luna está llena, el valor es hombre lobo. Entonces, en luna nueva, tengo este valor opcional de cero. Entonces, veamos qué sucede cuando tenemos cero. Configure una nueva variable llamada wolfStatus. Entonces haré este estado de lobo, y me encuentro con un problema. El valor de la cadena de tipo opcional se debe desenvolver. Entonces, cuando tengamos opciones, piense en ellas como una pequeña caja. Puede haber un valor en el cuadro. Puede que no haya ningún valor en la caja, cero. Pero para usar ese valor de manera segura, tenemos que desenvolver esa caja de una manera agradable y segura. Si echo un vistazo a wolfStatus aquí, la cadena. Así que ahora mismo es una cadena porque la he indicado aquí. Pero si comento esto y ejecuta esto y si hago Opción + clic en wolfStatus, el valor ahora, el tipo es una cadena opcional. Si trato de usar eso, Veré cero. Nulo. Cuando digo que tenemos que desempaquetar lo opcional, lo que quiero decir con eso es solo mirar el opcional como a es algo en una caja y no tiene valor o tiene valor, y necesitamos desempacar eso de manera segura. Hay una manera de desempacarlo donde estamos destrozando la caja, y eso es lo que te mostraré ahora y luego te mostraré cómo hacerlo de manera segura y hace que su código sea mucho más fluido. Así que hagamos otro ejemplo aquí de circusJob. Ahora, otra cosa, en la documentación la forma dar realmente un valor opcional es esto. Parece el camino largo al respecto, pero es muy explícito. Es opcional con el signo de interrogación aquí. Ahora, no tenemos que hacer esto, podemos hacer esto. Pero para que lo sepas, si alguna vez lo miras. Así que ahora mismo tengo una cadena opcional de CircusJob de Magician. Voy a concatenar esta cadena esta vez porque realmente te mostrará lo que sucede. Ahora bien, si corro, bueno, ni siquiera puedo ejecutarlo. El valor, obtenemos esta cosa roja, el valor debe ser desenvuelto. Ahora, si hago clic en este error, Puedo fusionar usando dos signos de interrogación o fuerce el desenvolvimiento usando un signo de exclamación para abortar la ejecución si el valor opcional contiene nil. Bueno, hagamos eso. Así que elegiré esto. Ahora, ejecutándolo, está perfectamente bien. Eso es porque esta marca de explicación es la forma de abrir esa caja, como de Hulk. Solo estás arrancando los lados y llegando al valor pero no eres muy delicado al respecto. Lo que significa que si este valor es nulo, esta fuerza que se desenvuelve colapsará, y es una colisión desagradable. Así que esta es la razón por la que probablemente la mayor parte del tiempo no quieres hacer una cosa como esta. Esto es exactamente por lo que quiero mostrártelo mostrarle lo que no debe hacer para que pueda verlo. Un método más seguro para sortear todo esto es que puedo usarlo condicional. Entonces, si un trabajo de circo no es igual al valor de cero, ahora seguiremos recibiendo un error aquí porque todavía tenemos que desenvolver esto. Pero en este caso, estamos comprobando dos veces. Entonces podemos forzar a desenvolver el valor, pero no nos estrellaremos si es nulo. Y déjame mostrarte lo que eso significa. Así que ahora mismo, si no es cero, Soy un mago, aquí mismo. Si es nulo, entonces el condicional se encargará de eso por nosotros. Y luego la descripción, no trabajo en el circo. Esto es solo forzar el desenvolvimiento. Hay otros métodos de hacer esto mucho mejor, mucho más limpio y seguro. Gracias por ver. Estén atentos para la próxima lección donde te mostraré cómo usar el operador coalescente nulo.