Aprender a desarrollar aplicaciones iOS y SwiftUI (2021) | Chris Ching | Skillshare
Buscar

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Aprender a desarrollar aplicaciones iOS y SwiftUI (2021)

teacher avatar Chris Ching, Co-Founder of CodeWithChris.com

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción

      0:48

    • 2.

      01: el ecosistema de desarrolladores de Apple Desarrollador

      3:59

    • 3.

      02: tutorial de Xcode tutorial

      20:09

    • 4.

      03: cómo construir interfaces de usuarios

      13:21

    • 5.

      04: vistas y envases de SwiftUI

      11:40

    • 6.

      05: construir el juego de cartas de guerra

      15:23

    • 7.

      06: constantes y tipos de datos de datos

      14:42

    • 8.

      07: funciones de programación rápida

      21:23

    • 9.

      08: estructuras de programación rápidas

      15:22

    • 10.

      09: instancias de programación Swift

      26:42

    • 11.

      10: botones de SwiftUI

      15:02

    • 12.

      11: propiedades de estado

      13:46

    • 13.

      12: si las declaraciones

      14:55

    • 14.

      13: desafío extras

      1:58

    • 15.

      14: ¿qué hay después?

      4:15

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

1504

Estudiantes

8

Proyectos

Acerca de esta clase

Oye, es Chris.

Solo quiero felicidad por dar el primer paso en tu viaje de aplicación y ofrecer algunas palabras de animación y animación.

A partir de un vistazo a un curso que has tomado antes, pero es mucho más que eso.

Este es este material de formación que he uso y perfeccionamiento desde 2013 y miles de estudiantes han pasado con mucho éxito.

Además, este esfuerzo del tiempo de los últimos 8 años que significa que la gente está apoyando y pagando por este entrenamiento que está consiguen resultados. Estoy diciendo todo ello porque no se menosque la transformación que pasarás en los 14 días de tiempo siguiente

Estas lecciones están diseñadas para llevar al desarrollo de aplicaciones para iOS que nunca has tocado una línea de código

Comenzarás cómo se hacen las aplicaciones, cómo el código puede entender el código Swift y escribirlo en forma no los non-coders no cofras.

Después de completar estos 14 días, tienes una decisión que tomarás la forma de continuar en la ruta de aprendizaje que puede surgir en una nueva carrera o negocio?

O tal vez descubriste que el desarrollo de aplicaciones no es para ti y eso está bien.

De cualquier manera, esta es una forma sólida y más profunda forma de entrar a desarrollo de aplicaciones de iOS de iOS y estoy tan humildes que estás estás aprendiendo conmigo.

Agradecido eso. Agradecido.

Bueno, ¡no puedo esperar a empezar a empezar!

Chris

Conoce a tu profesor(a)

Teacher Profile Image

Chris Ching

Co-Founder of CodeWithChris.com

Profesor(a)

If you’re a beginner and you want to learn app development step by step, in plain simple terms, then you’ve come to the right place.

Thousands of people, just like you, have used my actionable video and article tutorials to go from a beginner to a full fledged iOS developer.

What makes CodeWithChris different is the focus on staying motivated through small gains while building momentum to get to the finish line and cross the “Hump”.

My effective and motivational approach is why thousands of beginners are finding success using my material.

If you’d like to learn more, join my Skillshare class, visit CodeWithChris.com or search for CodeWithChris on YouTube.

Ver perfil completo

Habilidades relacionadas

Desarrollo Lenguajes de programación Swift
Level: Beginner

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción: Hola y bienvenidos. En este reto principiante de 14 días, vas a empezar tu viaje con una bang. Vas a aprender cómo se hacen las aplicaciones y cómo terminan en la tienda de aplicaciones. Te vas a familiarizar con Xcode y ahí iniciar tu propio proyecto de app. Vas a aprender a construir interfaces de usuario con Swift UI. Y vas a aprender los conceptos básicos de programación de Swift para que puedas leer y escribir código Swift simple. Ahora en las próximas 14 lecciones, vas a ganar todas estas nuevas habilidades. Y vas a haber construido tu propia app que puedes instalar en tu dispositivo y mostrar a todos tus amigos y familiares lo que has hecho. Más importante que eso, sin embargo, estarás extremadamente confiado y emocionado de seguir creciendo tus habilidades de desarrollo de aplicaciones más allá de lo que hemos cubierto aquí. Esto realmente podría ser el inicio de algo nuevo para ti. De acuerdo, Entonces si estás listo, enrollemos las mangas y empecemos. 2. 01: el ecosistema de desarrolladores de Apple Desarrollador: Voy a caminar por este diagrama y después, te diré dónde sacar todas las piezas, todo empieza con el Xcode IDE. Ahora, IDE significa Entorno de Desarrollo Integrado, que es un término para la aplicación y todas las herramientas que un desarrollador utiliza para construir algo. Para el resto de este curso, simplemente lo llamaremos Xcode. Aquí es donde construimos nuestra aplicación escribiendo código Swift, construyendo la interfaz de usuario o UI para abreviar, y conectándola con todos nuestros datos. Swift es el lenguaje de programación que utilizamos para expresar nuestra lógica y para decirle al sistema lo que queremos hacer. Incluso podemos construir la interfaz de usuario a través de código rápido, como pronto verás. Ahora, Swift UI es un marco de interfaz de usuario que nos facilita construir rápidamente aplicaciones para todas las plataformas apple. Un buen beneficio de aprender Xcode, UI rápido y rápido es que son las mismas habilidades y herramientas utilizadas para construir todas las aplicaciones para todas las plataformas de Apple, incluyendo iOS, iPados, tvOS, watchOS, y Mac OS. Y en algunos casos, tu app podrá trabajar en múltiples plataformas sin muchos cambios en absoluto. Ahora, una vez que tu aplicación esté construida, podrías distribuirla con la App Store de Apple. Esto se hace uniéndose al Programa de Desarrolladores de Apple, que requiere una cuota anual de inscripción. Una vez que estás inscrito, obtienes acceso a múltiples beneficios, entre ellos el portal de conexión de App Store, vuelo de prueba y el portal de aprovisionamiento. Hay algunos beneficios más, como el acceso al software beta y el soporte técnico de los ingenieros de Apple. Y proporcionaré un enlace a la lista completa a continuación. El portal de aprovisionamiento te da acceso a herramientas para identificar y firmar código tu aplicación. Es como poner tu firma en la app para que Apple pueda identificar quién la construyó. Y esto es importante para la seguridad de los usuarios finales descargando tu app. Y también es importante para ti porque detiene los codificadores maliciosos de fingir ser tú. Una vez que tu aplicación esté en un estado comprobable, vuelo de prueba te permite invitar a personas a descargar y probar tu aplicación beta. Allí podrá enviarle comentarios e informes de errores directamente a través del programa de vuelo de prueba. Usa el vuelo de prueba para asegurarte de que tu aplicación esté tan pulida como puede ser antes del lanzamiento. Y por último, App Store connect es donde crearás lo del atlas para tu app, incluidos todos los metadatos y capturas de pantalla. Si tu app tiene en compras de app, aquí también es donde las configurarías. Una vez que tu aplicación esté probada y el listado esté listo, puedes subir la app desde Xcode a App Store conectarte desde ahí, el equipo de certificación de Apple revisará tu aplicación para asegurarte de que cumpla con la App Directrices de calidad de tienda. Esto toma un par de días y no te preocupes si fallas porque puedes arreglar lo que señalen y volver a enviarlo para revisión. Si todo se ve bien, aprobarán la app y tu app estará en vivo. Enhorabuena. Muy bien, entonces, ¿dónde puedes conseguir estas diferentes piezas del Ecosistema de Desarrolladores de Apple? Puedes descargar Xcode gratis desde la Mac App Store. Voy a proporcionar un enlace a continuación. No necesitas obtener Swift o Swift UI. Esos solo vienen con Xcode. En cuanto al Programa de Desarrolladores de Apple, proporcionaré un enlace a la página de Inscripción que aparece a continuación. Quiero mencionar que unirte al Programa de Desarrolladores de Apple es completamente opcional si tu objetivo no es distribuir apps en el App Store, no te unes a él. Seguirás siendo capaz de aprender a construir aplicaciones para ti mismo. Entonces ese es el Ecosistema de Desarrolladores de Apple. Es el proceso por el que te estaré llevando si continúas con este viaje de app. Ahora al final de esta ruta de aprendizaje, estarás construyendo tus propias aplicaciones usando todas estas herramientas que hemos cubierto, aunque no tengas experiencia en codificación en este momento, te lo prometo, serás sorprendido por lo que se puede hacer al final de este reto. En la siguiente lección, vamos a sumergirnos directamente en Xcode. Está bien, nos vemos ahí. 3. 02: tutorial de Xcode tutorial: Hola y bienvenidos. En este tutorial de Xcode, te vas a familiarizar con el entorno de desarrollo en el que estarás construyendo aplicaciones. Te mostraré dónde descargar Xcode y cómo iniciar un nuevo proyecto de app. Y luego vamos a pasar por las grandes áreas de Xcode y luego lo que cada uno de los archivos en tu proyecto de app es de cuatro. Y luego finalmente, terminaremos la lección con algunos consejos rápidos sobre cómo navegar en Xcode. De acuerdo, con eso dicho, vamos a sumergirnos. Empecemos hablando de dónde conseguir Xcode. Es gratis, así que no necesitas pagarlo. Simplemente inicia la Mac App Store en tu computadora y luego busca Xcode. Vas a llegar a una página como esta en los resultados de búsqueda. Haga clic en él, y vas a poder descargarlo de forma gratuita. Por lo que ya lo tengo descargado. Entonces por eso dice actualización aquí. Yo quiero que simplemente ignoren la advertencia aquí. En realidad es una aplicación muy grande con muchas características diferentes. Es comprensible que haya algunos bichos. Y si miras las reseñas, hay personas que se quejan de otras cosas no relacionadas con la app. quejan de la forma en que Apple está manejando su negocio y así sucesivamente y así sucesivamente. Y algunos de estos son muy, muy viejos. De acuerdo, quiero que tomen nota de esta importante información. Haga clic en esto solo para asegurarse cuáles son los requisitos para instalar Xcode. Y también vuelve a comprobar que tienes suficiente espacio libre en el disco duro. Ahora en mi experiencia, realidad toma más espacio en el disco duro a lo largo del tiempo. Entonces lo que dice aquí. Entonces si tienes algo así como 12 gigs gratis, podría no dejarte instalar esto porque durante el proceso de instalación en realidad ocupa más espacio y luego creo que se deshace de un montón de archivos y se detiene a este tamaño. No obstante, con el tiempo, cuando descargas componentes de desarrollador adicionales y simuladores adicionales de iOS, esto en realidad puede llegar a ser aún mayor. Así que asegúrate de tener suficiente espacio en disco duro. Está bien, así que si por alguna razón no puedes obtener acceso al Mac App Store, también puedes visitar la página oficial de Xcode en el sitio web de desarrolladores de Apple. Por lo que la URL es desarrollador dot apple.com slash Xcode. Y de inmediato puedes dar click en el enlace Recursos aquí arriba. Y luego te llevarán a una página donde podrás descargar Xcode aquí solo te lleva por la Mac App Store. En realidad, también puedes descargar versiones beta de Xcode. Ahora no recomendaría esto porque muchas veces en realidad es bastante buggy. Ahí software beta. Por lo que recomendaría apegarse a los lanzamientos oficiales. Si por alguna razón quieres descargar una versión anterior de Xcode, puedes desplazarte aquí abajo y puedes hacer clic en este enlace aquí. Ahora solo una nota, para poder descargar versiones beta del software de Apple, necesitas estar inscrito en su Programa de Desarrolladores de Apple, que hablamos en la lección anterior. Para descargar versiones anteriores de Xcode, no creo que necesites estar inscrito en ese programa. Creo que solo necesitas una Apple ID gratis. Y por último, si estás en un PC, estás ejecutando Windows. Consulta los recursos en el inicio del curso para ver opciones para ti. De acuerdo, así que ahora aprovecha para descargar e instalar Xcode si aún no lo has hecho, para luego lanzarlo por primera vez. Durante tu primer lanzamiento, te va a pedir tu contraseña administrativa para tu contraseña administrativa para instalar componentes de desarrollo adicionales. Vas a querer hacer esto. Así que adelante e ingresa tu contraseña de administrador. Después de que hayas hecho eso, sigamos con el resto del video. Está bien, así que ahora hablemos de cómo iniciar un nuevo proyecto Xcode. Esta debería ser la primera pantalla de bienvenida que veas cuando inicias Xcode. Si no ves esto, no te preocupes, siempre puedes ir a Archivo Nuevo y elegir proyecto. De lo contrario, desde esta pantalla de bienvenida, puedes seguir adelante y hacer clic en Crear un nuevo proyecto Xcode desde aquí. Desde aquí vas a elegir una plantilla para tu nuevo proyecto. Vas a configurar las propiedades del proyecto para esto, y luego vas a elegir un lugar para guardarlo. Entonces empecemos eligiendo una plantilla. El más básico para nuestros propósitos está bajo iOS y app. Así que adelante y elige eso y golpea Next. Y luego aquí vas a configurar las propiedades para tu proyecto. Entonces si no tienes equipo aquí, no te preocupes. Posteriormente puedes agregar tu cuenta de Apple aquí y luego puedes configurar el equipo para el proyecto. Algo de lo que querrás asegurarte sin embargo, es establecer aquí el identificador de tu organización. Si tienes un negocio o un sitio web, puedes usar el nombre de estilo de dominio inverso aquí, com dot, cualquiera que sea. E incluso puedes usar tu y apellido aquí si quieres. Y luego aquí rellenarías el nombre de tu app o el nombre del producto. Entonces aquí, si lo pongo a prueba, verás que este identificador de paquete es una combinación del identificador de organización más el nombre del producto. Y esto en conjunto forma este único identificador de paquete. Este identificador de paquete se utiliza en diferentes lugares para identificar tu aplicación, como en la tienda de aplicaciones o en el portal de aprovisionamiento, o en App Store connect. Entonces esto es muy importante. No te preocupes, puedes cambiar el identificador del paquete para tu proyecto más adelante. Yo solo quiero llamar su atención sobre cómo se forma y para qué se utiliza. Muy bien, a continuación. Tu interfaz, vas a asegurarte de que tengas seleccionado Swift UI. Y para el ciclo de vida, vas a asegurarte de tener seleccionada la aplicación Swift UI. Y luego finalmente para el lenguaje, elige rápido y para estas opciones, solo déjalos todos sin marcar o si están revisados, solo desmarcarlos. Ahora una breve nota sobre estos desplegables aquí mismo. Con el tiempo, a medida que el desarrollo de aplicaciones para iOS ha evolucionado, ha habido un par de lenguajes de programación y también un par de formas de construir interfaces de usuario. El último y más grande es la UI rápida y rápida. Entonces eso es lo que queremos estar usando. Adelante y golpeemos Next. Si estás contento con todas tus selecciones aquí, y luego elige un lugar para guardarlo. Simplemente lo voy a guardar en mi escritorio para que sea fácil de encontrar. Ya que ya tengo su proyecto ahí, sólo lo iba a reemplazar. Muy bien, Bienvenido a su nuevo proyecto Xcode. Ahora podría parecer abrumador con todos los diferentes paneles y áreas, pero en realidad no es tan complejo una vez que sabes cómo se descompone, en realidad solo hay cuatro áreas principales de Xcode. Empecemos desde la muy, muy izquierda. Aquí tenemos el panel del navegador o el Área del Navegador en, como puedes ver aquí, tenemos un listado de archivos de todos los diferentes archivos en nuestro proyecto de app. El área del navegador en realidad tiene diferentes pestañas para navegar por diferentes cosas también, a las que llegaremos en futuras lecciones por ahora, está configurada en la primera pestaña y tenemos un listado de nuestros archivos. Al hacer clic en un archivo, cambia lo que se muestra en esta gran área principal, y esto se llama el área del editor. Nos permite editar los archivos que lo elegimos en el navegador de archivos, puedes ver que se adapta al tipo de archivo que elijas. Elige un archivo swift de puntos, esos son archivos de código. Si elijo este archivo de activos de XC, esta es una biblioteca de imágenes, así que me está mostrando algo como esto. El área del editor es un lugar para editar el archivo que elijo aquí. Por lo que el último tabulador está en el lado muy derecho y esto se le llama el área de inspector. Y o bien me muestra información adicional adicional sobre lo que seleccioné el área del editor, o me permite configurar o editar lo que selecciono en el área del editor dependiendo en qué tipo de editor estoy trabajando actualmente. Entonces, por ejemplo, este es un editor de código porque estoy mirando un archivo de puntos swift. Cuando paso el cursor sobre o selecciono la palabra clave aquí, si estoy en esta pestaña de Ayuda rápida, me está mostrando información rápida sobre para qué sirve esa pieza de código o palabra clave. El panel inspector también tiene un par de pestañas diferentes aquí arriba. Por ejemplo, esta es una pestaña de identidad. Me muestra información sobre ese archivo que tengo seleccionado sobre dónde se encuentra y qué app se incluye en un si estábamos construyendo nuestra interfaz de usuario. Ahora si fuera a seleccionar uno de esos elementos e ir a esta pestaña, me permitiría configurarlo. Entonces, para resumirlo, el panel inspector aquí es contextual a lo que se selecciona en el área del editor. Y el área del editor es contextual a lo que se selecciona en el área del navegador. Por lo que todo deriva de lo que seleccionas aquí en el lado izquierdo primero. Y luego cruzando la parte superior, tenemos la barra de herramientas aquí. Déjame explicarte qué es esto. Aquí hay un botón a la izquierda y muy derecha para esconderse y mostrar al navegante e inspector. Estos son útiles si no tienes mucha pantalla inmobiliaria. Lo siguiente que quiero llamar su atención es en el medio aquí. Esta es la barra de estado. Te dice lo que está sucediendo actualmente. ¿ Qué hace Xcode? ¿ Tiene algún error? ¿ Tiene alguna advertencia, y así sucesivamente y demás. A la izquierda de eso, tienes un desplegable para seleccionar un simulador. Y este simulador de iOS es básicamente un dispositivo virtual que aparece en la pantalla donde puedes ejecutar tu app y probarla. En realidad no necesitas un dispositivo físico. Si sí tienes uno, por muy nuevo que sea, conéctalo y quieres ejecutar tu proyecto Xcode en tu dispositivo real, encontrarás que será seleccionable desde aquí una vez que lo conectes. Y luego a la izquierda de este menú, vas a ver un par de botones aquí para ejecutar tu proyecto. Golpear este botón en realidad ejecutará tu proyecto en este simulador. Y golpear el botón de parada dejará de ejecutar tu proyecto en el simulador. Y luego todo el camino por el lado derecho, también hay dos botones más. Este es el botón de biblioteca donde vas a encontrar diferentes elementos de la interfaz de usuario, diferentes formas de modificar esos elementos. Código fragmentos en los activos que has agregado al proyecto, los colores que has especificado para tu proyecto y así sucesivamente. Este pequeño panel de biblioteca es útil para hacer una búsqueda. Y para seleccionar rápidamente y agregar cosas al área del editor. Vamos a llegar a eso en la siguiente lección. Pero por ahora, ese es el área de la biblioteca. Esto, probablemente no usarás demasiado al principio. Se trata de un tipo de botón de revisión o revisión de código que te mostrará si estás usando el control fuente, cómo se han cambiado tus archivos a través del tiempo. Por lo que esas son las cuatro áreas principales de la interfaz de usuario de Xcode. Muy bien, ahora repasemos los archivos de tu nuevo proyecto. Empecemos desde lo más alto. Este es el nodo raíz, o es su archivo de proyecto. Si seleccionaste, el área del editor cambiará a esta pantalla de configuración para que edites algunos de esos detalles que pertenecen a tu proyecto. Por ejemplo, aquí está el identificador de paquete que es cambiable. Se puede configurar la orientación del dispositivo en qué dispositivos y en qué plataformas se pueden ejecutar, cosas así. Si bajamos un nivel, se puede ver que aquí hay dos carpetas. Este está conteniendo todos tus archivos de código y archivos de proyecto. Este producto uno contiene la salida. Cuando construyes tu app y la compilas, se convierte en esta app, que en última instancia es ese pequeño paquete o paquete implementable que enviamos a la App Store. Realmente no tienes que hacer demasiado aquí con esto, pero ahí es donde se almacena. Muy bien, echemos un vistazo a este expediente. Este llevará el nombre de su nombre de producto, app dot swift. Y puedes ver aquí con esta etiqueta principal aquí, este es el punto de entrada a tu app. En este punto, no hay mucho que configurar aquí. Todo lo que realmente hace es crear esa primera vista que el usuario ve, que es vista de contenido. Y se puede ver que este nombre asigna a la vista de contenido punto swift. Entonces echemos un vistazo a esto. Este archivo representa la vista que ve el usuario. Ahora puedes crear vistas adicionales, pero de forma predeterminada obtienes esta vista de contenido para empezar. Y sí, todo es código aquí. Por lo que eso significa que la interfaz de usuario se genera por código. Pero también hay una forma visual de personalizar la interfaz de usuario, que verás en la siguiente lección. Sigamos con nuestros otros archivos. Esta, como mencioné antes, es nuestra biblioteca de activos. Aquí es donde podemos almacenar los colores para nuestra app, así como los iconos de la app, así como cualquier otra imagen que queramos agregar a nuestro proyecto. Simplemente lo arrastramos y lo soltamos aquí. Y este es nuestro activo de imagen. Bueno, no sólo imágenes sino Biblioteca de Activos. Y luego tenemos un info.plist y esta es alguna información adicional de configuración para el proyecto. Aquí tenemos contenido de vista previa, y esta es otra biblioteca de activos, pero estos son sólo para activos de preproducción. Entonces solo imágenes y texto y colores y cosas así con las que estás probando como sugiere la vista previa del nombre, si es un activo que en última instancia llegará a la app que vas a empujar el App Store, entonces puedes ponerlo en la biblioteca de activos aquí en su lugar. Entonces esa es una rápida explicación de todos los archivos de tu proyecto en pocas palabras. En las futuras lecciones, vamos a profundizar en cada una y vas a ver cómo cada uno de estos archivos juega un papel en la construcción de tu app. Lo último que quiero hacer en esta lección es darte un par de consejos rápidos navegar por Xcode en cuanto a pasar por tus archivos, y también en cuanto a editar código. Entonces, antes que nada, hablemos de navegar y archivos. Te darás cuenta de estas dos flechas aquí. Estos son realmente manejables porque te va a dejar ir al último archivo que estabas mirando. Y aunque ahora parece un poco trivial, cuando estás saltando por la edición y los archivos, esto se vuelve realmente útil. En lugar de tener que ir y volver a seleccionar ese archivo desde el navegador, puedes simplemente retroceder y saltar de nuevo a ese archivo anterior. También notarás que puedes tener varias pestañas aquí. Por lo que puedes mantener presionado el control y puedes hacer clic en un archivo y siempre puedes elegir abrir en nueva pestaña. También puedes abrir en una ventana nueva si quieres. Entonces como ya tengo eso como tabulador, entonces no me va a abrir una segunda pestaña. Ahora bien, si quieres tener cosas de lado a lado, puedes hacerlo también. Entonces digamos que quería mirar estos dos archivos uno al lado del otro. Para que pueda cerrar esto. Y luego puedo seguir adelante y puedo agregar otro panel de editor en el lado derecho, para que pueda dividir mi área de editor en dos áreas de Editor. Se puede ver que aquí estoy mirando la vista de contenido que rápido para aquí. Echemos un vistazo a la aplicación de prueba. Por lo que son áreas independientes. Podría querer deshacerme de mi lienzo. Y entonces puedo ver a ambos PFOS así. Si prefieres que se apilen horizontalmente, puedes mantener presionada la opción. Y se puede ver que ese icono cambia. Correcto, si vuelves a pulsar este botón, se va a añadir otra área de editor a la derecha. Entonces te vas a dividir en tres. O bien puedes mantener presionada Opción y puedes agregar un editor a la parte inferior en su lugar. Entonces haces eso. También puedes hacer eso aquí, mantener presionada Opción y hacer eso. Ahora una forma rápida de lanzar un archivo en una vista dividida del editor. Entonces digamos que estoy mirando la aplicación de prueba y quiero abrir la vista de contenido como un área de editor independiente. Puedo mantener presionada Opción y hacer clic en el archivo que quiero abrir en una vista separada del editor. Entonces esas son algunas de las formas que puedes trabajar con tus archivos. Tan solo para recapitular, puedes navegar. Se puede volver atrás y seguir adelante. Puedes tener diferentes pestañas. Y luego también puedes dividir tu área de editor en múltiples instancias del editor. Ahora quiero hablar de editar código porque esto es mucho de lo que vas a estar haciendo. Y el código se ve bastante corto en este momento, pero puede llegar a ser más largo. Por lo que es útil conocer un par de formas de lidiar con eso. En la parte superior aquí, vas a ver este tipo de menú de migas de pan. Y notarás que ese es el nodo raíz corresponde a eso, ¿verdad? Esta es una carpeta o grupo, puede ver eso. Y luego esta es la vista de contenido, que es el archivo que estás mirando, que está aquí dentro de las pruebas. Y aquí, en realidad podemos hacer clic en esto y puedes saltar a diferentes secciones de tu código. Se puede ver que la vista de contenido coincide con eso. Cuerpo coincide con eso, ¿verdad? Por lo que esta es una gran manera de saltar a diferentes secciones en su archivo de código en caso de que su archivo de código se vuelva bastante largo. También puedes agregar diferentes comentarios aquí que corresponderán a lo que ves aquí arriba. Por lo que puedes ver aquí, he creado mi propia documentación y la agrega aquí. Por lo que esta es una gran manera de organizar tu archivo. Vamos a volver a hablar de esto en el futuro. Entonces no te preocupes si esto va un poco demasiado rápido. Muy bien, Ahora vamos a hablar de este pequeño botón aquí. me has visto usar esto para abrir el Canvas, pero también puedes abrir este minimapa aquí mismo. Y este minimapa te mostrará un esquema de tu archivo de código. Puedes arrastrar esto para fregar a través de tu código. Desafortunadamente, no puedo hacerlo mucho aquí porque este archivo de código no es muy largo. Pero si tuvieras un archivo de código realmente largo, te mostraría el contorno de ese archivo de código aquí abajo. Y puedes navegar realmente fácilmente haciendo clic y arrastrando esto. Te darás cuenta de que incluso como resalté, me va a mostrar las diferentes partes de mi código correspondientes a lo que tenemos aquí. Nuevamente, esos eran solo algunos consejos de fuego rápido. No te preocupes si eso voló demasiado rápido porque estaremos usando todas estas cosas juntas en las próximas lecciones. Entonces ese es un tutorial rápido para que empieces. No tan complicado una vez que sabes dónde están las cosas bien, Solo para recapitular, descubriste dónde descargar Xcode y cómo iniciar un nuevo proyecto de app. Aprendes para qué sirve cada uno de los archivos de tu proyecto. Y aprendes las principales áreas de Xcode incluyendo el navegador, el editor, el inspector, la barra de herramientas. Por último, también aprenderás algunos consejos rápidos sobre cómo navegar con ese Xcode. Ahora, no te preocupes si es un poco abrumador en este momento, te sentirás como en casa con Xcode ya que lo usamos más a menudo juntos en las próximas lecciones para ayudarte a instalarte, En realidad creé una hoja de trucos Xcode la cual puedes imprimir y mantenerte a tu lado ya que estás aprendiendo a usar Xcode, te recomiendo encarecidamente que intentes crear tu propio proyecto Xcode en tu propia computadora solo para una práctica extra. En la siguiente lección, y vamos a usar Xcode para construir nuestra primera interfaz de usuario. Está bien, nos vemos ahí. 4. 03: cómo construir interfaces de usuarios: Hola y bienvenidos. En esta lección, vas a aprender a usar Xcode podría construir interfaces de usuario con Swift UI. Primero vamos a aprender a previsualizar la aplicación para que realmente puedas ver cómo es la interfaz de usuario. No te muestran cómo usar Xcode para construir visualmente la interfaz de usuario o la interfaz de usuario para abreviar. Ahora hasta ahora, el aprendizaje ha sido bastante pasivo, lo que significa que solo puedes sentarte y ver los videos. Pero a partir de ahora, vamos a cambiar a un aprendizaje más activo. Yo quiero que hagas lo que hago, repliques en tu propio proyecto Xcode. Y quiero que intenten cualquiera de los retos que ustedes, esta es la mejor manera de aprender. Y con toda franqueza, si solo vas a sentarte y ver las lecciones y no hacer nada del trabajo. No estás haciendo lo mejor de tu tiempo. Esta ha sido mi experiencia personal y creo que será lo mismo para ti. Entonces si estás listo, vamos a empezar a ensuciarnos las manos. Hagámoslo. Empecemos por crear un nuevo proyecto Xcode. Vamos a elegir la aplicación para iOS. Y voy a llamar a esto una prueba de UI. Simplemente asegúrate de que las interfaces Swift UI ciclo de vida es rápida aplicación UI y el lenguaje es rápido Aparte de eso, puedes nombrarlo lo que quieras. Sigamos adelante y salvemos nuestro proyecto. Y como mencioné en la lección anterior, punto de vista de contenido Swift representa tu vista. Pero como puedes ver, todo es código. Entonces, ¿cómo ves realmente cómo se ve tu IU? Bueno, hay dos maneras diferentes. El primer modo es lanzar tu app en un simulador de iOS, como mencioné antes. Entonces sigamos adelante y hagamos eso primero. Selecciona uno que te apetezca. Por lo que voy a seleccionar el iPhone 11. Y voy a golpear este botón de construir y ejecutar. Ahora es la primera vez que lanzas el simulador de iOS. Va a tardar un tiempo en arrancar, igual que sería arrancar un dispositivo real para mí porque ya he lanzado el simulador antes. Está sucediendo de verdad, muy rápido. Como puedes ver, por defecto, tu proyecto tiene una etiqueta Hello World. Vamos a hablar de eso en un segundo. Pero primero, déjame mostrarte la otra forma en que puedes previsualizar tu app. Entonces sigamos adelante y detengamos nuestro proyecto. Y eso va a impedir que la aplicación se ejecute en el simulador. La segunda forma es previsualizar tu app en este lienzo aquí mismo. Eso es parte del área de editores. Si no ves esto, puedes hacer click en este pequeño botón aquí y asegurarte de que haya una marca de verificación al lado de Canvas. Y si estás mirando un archivo de punto swift, que es una vista, vas a poder ver este Canvas. De lo contrario, si estás mirando este archivo de punto de entrada aquí, puedes ver que no hay vista previa. Entonces volvamos a la vista de contenido. Asegúrate de que tenemos nuestra vista previa aquí y haz clic en currículum. Se va a construir y a ejecutarlo. Y luego vas a ver la vista previa aquí. Otra vez. Si es la primera vez que lo haces, podría tardar un poco. Usemos los controles de zoom aquí abajo y alejemos un poco para que podamos ver todo el asunto. Ahora justo al lado del bate, hay un par de cosas que quiero mencionar aquí. Esto es simplemente una vista previa, mientras que cuando inicias eso en el simulador, realmente estás instalando esa aplicación en un dispositivo virtual para que puedas interactuar con ella y probarla. Aquí, esta es una vista previa con la que no puedes interactuar, pero hay una forma en la que puedes. Entonces si haces clic en este botón aquí, vista previa en vivo entra en un modo donde es igual que el simulador que viste antes. Pero está en este lienzo de vista previa. Para que puedas seguir adelante y golpear Stop. Y entonces de nuevo, sólo se convierte en un adelanto normal. Eso es sólo para fines de previsualización. Otra cosa genial de usar este lienzo de vista previa es que puedes presionar este botón aquí y puedes elegir un dispositivo diferente. Puedes elegir un diseño, puedes elegir el modo oscuro o el modo claro, y puedes elegir una serie de cosas diferentes. Esta es la forma preferida de previsualizar tu IU porque a medida que estás construyendo tu IU a través del código de este lado, vas a poder ver que las cosas cambian a la derecha aquí sin tener para relanzar la app en el simulador. Muy bien, ahora vamos a sumergirnos y hablar de cómo vamos a construir realmente la interfaz de usuario. Así que asegúrate de tener la vista de contenido dot swift resaltado y sigue adelante y oculta el navegador de archivos. Ahora hay un montón de código aquí que conforman la vista. Pero lo vamos a pasar a fondo más adelante cuando aprendas algunos de los conceptos básicos de programación Swift por ahora, para evitar confusiones, solo quería llamar tu atención sobre una cosa, que es esta pieza de código aquí mismo. Lo que he destacado en la pantalla es lo que está generando esta etiqueta aquí que se ve en la vista previa. Observe que tenemos una palabra clave de texto. Tenemos la pieza de texto holomundo que puedes ver aquí. Y también tenemos este elemento de relleno aquí, que da el relleno alrededor de la palabra. Echemos un vistazo a esta pieza de código y lo desglosemos. En realidad sólo voy a seguir adelante y eliminarlo. Como puedes ver, Xcode va a lanzar todo tipo de quejas y errores. Pero no te preocupes, lo vamos a arreglar enseguida. Ahora, nuestros elementos de interfaz de usuario tienen que vivir entre este soporte de apertura y este corchete de cierre. Y solo se puede tener un elemento de interfaz de usuario. Ahora obviamente eso no tiene sentido porque nuestras interfaces de usuario están conformadas por más de un elemento. Pero ahí es donde entran en juego los elementos de contenedor. Y te mostraré un par de esos de esta lección también. Por ahora, recrear ese elemento de texto. Entonces lo que escribimos es esa palabra clave de texto seguida de un par de corchetes como ese, corchetes redondeados. Y luego dentro de ahí tenemos un par de comillas. Y luego ponemos la pieza de texto que queremos mostrar. Entonces aquí sólo voy a poner hola. Pero notarás que este marco azul rampa muy fuertemente contra mi texto hola. Si quisieras agregar el relleno hacia atrás, entonces escribirías punto. Y luego simplemente escribirías relleno y usando autocompletar, solo puedes seleccionar ese ahí mismo. Y así, hemos recreado esa etiqueta con relleno. Este de aquí es el elemento de texto o la etiqueta. Esta parte con el relleno de puntos. A esto se le llama modificador. Y se puede pensar en un modificador como un apego a un elemento que cambia el aspecto y el comportamiento del mismo. En este caso, este modificador de relleno agrega relleno a los elementos de texto para que si hay un elemento justo al lado de él, haya algún espacio alrededor de nuestro elemento de texto. Y en realidad hay muchos más modificadores que podemos agregar a nuestros elementos de interfaz de usuario. Por ejemplo, puedo agregar uno llamado fondo, y solo lo agregaré al final del relleno. Y voy a decir que el fondo para esta etiqueta debe ser azul. Para que veas que nuestro lienzo de vista previa representa muy bien lo que estamos escribiendo aquí a través del código. Si hay algún momento en que las cosas se dessincronicen, tal vez el código que estás escribiendo aquí está diciendo que el fondo debe ser verde, pero no lo estás viendo aquí. El código se considera la fuente de la verdad porque en última instancia, el lienzo de vista previa e incluso lo que se ve en el panel Inspector son sólo representaciones visuales del código. Y eso me lleva a mi siguiente punto, que es cuando estás construyendo la interfaz de usuario, no tienes que escribir código. Hay tantas formas visuales para que construyas el código. Vamos a borrar este elemento de texto y otra vez, y déjame mostrarte algunas de las formas en que puedes construir visualmente la interfaz de usuario. Hablé antes del panel de la biblioteca. Por lo que puedes ver aquí que simplemente podemos seleccionar, buscar el elemento de texto seleccionado, y podemos arrastrarlo a nuestro editor de código aquí mismo. Y luego podemos cambiar el texto de marcadores de posición, pero ni siquiera tenemos que cambiar el texto aquí. Si haces clic en este elemento de texto y entras al panel de inspector, puedes cambiarlo aquí así. Y luego también en este panel inspector, verás que hay un montón de modificadores que podemos agregar. Entonces el agregar el relleno, podría hacer clic en esto para agregar solo relleno superior. Y se puede ver que el código cambia. Y está especificando que solo un relleno en la parte superior. Y lo puedes ver reflejado aquí. O puedo hacer clic en este aquí y encender o apagar el relleno. Y ya puedes ver ahora tengo relleno por todos lados. Entonces, además de algunos de los modificadores que ves aquí, aquí abajo, hay un cuadro de texto donde puedes buscar más modificadores. que pueda buscar el de fondo y hacer clic en eso. Y luego selecciona ese fondo azul, como puedes ver aquí. Y entonces también puedo agregar ese relleno. Ahora, además de usar los modificadores que ves aquí y usar este cuadro de texto Agregar modificador, también puedes usar la biblioteca para agregar modificadores. Por lo que esta primera pestaña te da todos los elementos de la interfaz de usuario que puedes agregar a tu vista aquí en la segunda pestaña o modificadores. Entonces como puedes ver, ahí está el relleno, ahí está el de fondo. Entonces, ¿cómo se va a añadir estos modificadores? Bueno, solo tienes que hacer clic y lo arrastras. Pero aquí tienes que asegurarte de que lo arrastras hasta el final del código. Porque si accidentalmente lo arrastras en medio de tu código, puede que no tome, o podrías conseguir algo así. Eso claramente es un error. Entonces vamos a deshacer eso. Entonces como si eso fuera poco, hay un par de formas más que quería mostrarte sobre cómo puedes modificar visualmente tus elementos de la interfaz de usuario en lugar de escribir código. En primer lugar, terminemos de configurar este fondo y vamos a seleccionar azul ahí mismo, o tal vez verde. De acuerdo, eso no es cambiar eso. Entonces está cambiando eso, pero aquí no está cambiando. Entonces voy a seguir adelante y seleccionar el color, y vamos a hacer g verde, minúscula Muy bien, para que puedas mantener presionada Comando en tu teclado y luego puedes hacer click en el elemento de interfaz de usuario desde tu vista previa aquí mismo. Y luego hay una serie de cosas que puedes hacer con ese elemento, incluyendo esta, mostrar Swift UI inspector. Y luego de nuevo obtienes este Add Modifier, TextField, lo que puedes buscar modificadores para agregar. Entonces voy a añadir uno que se llama Desenfoque. Se puede ver que está difuminando el color verde. Y se puede ver que ahora mi fondo es un verde borroso. Ahora puedes hacer lo mismo en los lados del editor de código. Para que puedas mantener presionado el comando y puedes hacer clic en el elemento de texto y obtienes este menú. Puede, nuevamente haga clic en Mostrar inspector de interfaz de usuario de Swift. Y desde aquí se puede ver que este menú se parece al inspector aquí. Y también podemos agregar modificadores también. Entonces para ilustrar mi punto, te he mostrado un montón de formas diferentes para que modifiques visualmente tu interfaz de usuario. No tienes que escribir el código. Pero con el tiempo, como estás haciendo esto de la manera visual, estás viendo el código que se genera una y otra vez. Vas a llegar a un punto en el que es tan familiar, va a ser más rápido para ti solo escribirlo lugar de hacer clic en todas partes. Por lo que es una manera realmente ordenada de aprender el código de la interfaz de usuario. ¿ No es eso bastante guay? Xcode ha recorrido un largo camino en el pasado. Solía ser muy quisquilloso usar el constructor de interfaz visual con Xcode, pero Swift UI realmente ha cambiado las cosas para mejor. Ahora en esta lección, aprenderás a usar el elemento de texto y tenía un modificar su aspecto y comportamiento usando modificadores. Además de eso, también aprendes que la interfaz de usuario en realidad se genera a partir del código Swift. No obstante, hay una multitud de formas en Xcode para construir tu interfaz de usuario visualmente. Y a medida que construyes tu IU visualmente a través del Canvas anterior o del panel inspector, como demostramos, el código rápido en el editor de código se actualiza automáticamente para reflejar esos cambios. Por lo que esta es una gran manera de aprender el código rápido. La próxima vez que nos sentemos juntos, les presentaré vistas y contenedores adicionales que pueden usar para que puedan construir interfaces de usuario más complicadas. Está bien, nos vemos ahí. 5. 04: vistas y envases de SwiftUI: Hola y bienvenidos. En esta lección, vas a aprender a usar una variedad de diferentes elementos y contenedores de interfaz de usuario. Y luego al final de la lección, te mostraré un par de interfaces de usuario que me gustaría que trataras de construirte como práctica. Recuerda, vas a sacar mucho más de este curso si te detuviste a lo largo la lección y trataste de replicar lo que he hecho en tu propio proyecto Xcode. Muy bien hablando. Lleguemos a la parte divertida. De acuerdo, claro, así que has aprendido sobre el elemento de texto. Ahora quiero mostrarte el elemento de imagen. Entonces vamos a seguir adelante y borrar esto. Y por qué no usamos la biblioteca para buscar el elemento de imagen. Entonces sigamos adelante y arrastremos y soltemos la imagen ahí. Ahora el problema es que no tenemos ninguna imagen que mostrar. Pero antes de que te diga cómo especificar eso, acabo de notar que Es una especie de en el mismo formato que el elemento de texto ¿verdad? Ahí está la palabra clave imagen aquí, y luego hay un conjunto de corchetes redondos. Y en medio, vamos a poner nuestro nombre de imagen. Ahora, este nombre de imagen se asigna a cualquier activo gráfico que hayamos puesto en nuestra biblioteca de activos. Entonces si abrimos nuestro navegador de archivos y entramos a nuestra biblioteca de activos, puedes ver que todo está vacío. Aquí no tenemos nada. Entonces sigamos adelante y pongamos una imagen aquí. Si vas a los recursos de la lección, vas a ver un archivo zip llamado Logo assets. Y vamos a seguir adelante y descomprimirlos. Y luego dentro vas a encontrar una imagen local. Vas a encontrar tres archivos en realidad. Y se les nombra de la misma manera excepto con un apt a x y luego agregan tres x. Y eso es literalmente sólo dos veces más grande que el primero. Y este es tres veces más grande que el primero. Y la razón por la que vienen en diferentes tamaños es porque existen dispositivos iOS con diferentes resoluciones de pantalla. Por lo que al agregar los tres tamaños, la plataforma elegirá el tamaño adecuado para usar para la resolución de pantalla. Se está exhibiendo en. Entonces todo lo que tienes que hacer es agarrar los tres y luego arrastrarlo a la biblioteca de activos así. Va a ser lo suficientemente inteligente para saber que esos tres están en el mismo grupo. Y le va a dar un nombre. Siempre puedes cambiar el nombre de esto para que puedas hacer clic en él y puedes nombrarlo lo que quieras. Pero este nombre aquí mismo es a lo que vas a estar referenciando en el elemento de imagen. Así que adelante y ponga entre comillas, ese nombre del activo de imagen, y debería verlo aparecer aquí. Ah, en realidad la vista previa automática, la actualización, la pausa, sigue adelante y pulsa Reanudar. Está bien, ahí dentro vemos nuestra imagen. Ahora por defecto, muestra la imagen al tamaño del activo gráfico que importó. No obstante, si quería redimensionarlo, escalarlo hacia arriba o hacia abajo, puede agregar un modificador llamado redimensionable. Cuando golpees eso, se podrá estirar. Cuando se estira si querías mantener la relación de aspecto porque puedes ver aquí todo está estirado y no se parece a la imagen original. Se puede agregar otro modificador llamado relación de aspecto. Y no lo olvides, a pesar de que estoy escribiendo estos modificadores a través del código aquí, siempre puedes agregarlos a través de este menú. Lo puedes encontrar ahí mismo. Y luego el modificador de relación de aspecto permite seleccionar diferentes formas en las que esto debería escalarse. Entonces si digo fit, lo va a escalar para que quepa dentro de los límites. Pero con mantener la relación de aspecto. Y si bien estamos agregando estos modificadores, este sería un buen punto mencionar que una buena práctica es golpear Enter en tus modificadores aquí para que se alineen. Debido a que algunos elementos podrían tener una lista de modificadores y al ponerlos todos en una nueva línea, automáticamente sangran bajo los elementos de la interfaz de usuario a los que pertenecían y se vuelve muy fácil leer. Muy bien, ahora ya sabes de elementos de texto y elementos de imagen. ¿ Cómo vamos a combinar los dos? ¿ Cómo hacemos para tener más de un elemento para nuestra interfaz de usuario? Aquí es donde entran en juego los elementos de contenedor. Entonces sigamos adelante en nuestra biblioteca y busquemos v stack. Esta es la que me refiero, la pila vertical. Y puedes seguir adelante y hacer clic y arrastrarlo aquí. Ahora, vas a conseguir algunos errores porque esto cuenta como un elemento a. Ahora, parece que Xcode no se ha puesto al día, pero esta no sería una UI válida. Esencialmente, aquí tenemos dos elementos. Lo que queremos hacer en cambio es que queremos tomar nuestra imagen y voy a cortar ese código y lo voy a pegar entre este corchete de apertura y cierre de la pila vertical. Dentro de la pila vertical, puedes poner hasta 10 elementos y los va a apilar verticalmente uno encima del otro. Entonces aquí también voy a poner. Elemento de texto así. Y se puede ver que ahora soy capaz de tener dos elementos y se apilan automáticamente uno encima del otro. Además de la pila vertical, también hay una horizontal. Y en lugar de la pila, esa es H stack. Y si cambias eso a una espalda H, verás que ahora está apilada horizontalmente uno al lado del otro. Y también hay uno llamado zed stack, estoy en Canadá, o z stack si lo prefieres. Y esto coloca las cosas encima unas de otras con los elementos en la parte superior siendo los más lejanos en la espalda. Por lo que puedes ver que nuestro elemento de texto hola se sienta en la parte superior de la imagen. Ahora lo genial es que puedes anidar estos diferentes elementos de contenedor. Para que yo pueda tener, digamos, quiero que mi imagen, logo sea el fondo y arriba, quiero tener que textar elementos lado a lado. Entonces puedo usar una pila H aquí. Y en lugar de escribirlo o arrastrarlo desde la biblioteca, te voy a mostrar otra forma en la que incrustar tus elementos en las pilas. Si mantienes presionada Comando y haces clic en el elemento, ya has visto este menú antes. Puedes incrustar en H stack y solo va a crear eso para ti. Y esa es probablemente la forma más fácil de hacerlo. Entonces en esta pila H, voy a añadir hola mundo. Se puede ver aquí que ahora mi imagen está detrás de esta pila H con dos elementos de texto. Ahora parece bastante intuitivo usar estas pilas, ¿verdad? Pero, ¿cómo arreglan los elementos dentro de este impuesto? Bueno, hay algunas opciones. Entonces si hago clic en esta pila aquí, en realidad echemos un vistazo a la pila. Entonces voy a seguir adelante y hacer clic en eso. Este realmente tiene alineación. Así que ese ciervo no lo hace porque simplemente se pone todo encima el uno del otro. Pero para la pila H y la pila, hay una alineación. que puedas elegir alinear todo por sus medios, alinear todo por sus líneas de base, o alinear todo por la parte superior. Y también puedes agregar espaciado. Por lo que puedes ver aquí estoy agregando un espaciado de tres. Se puede ver cómo cambia el código y en realidad agrega un espaciado allí. Ahora es muy poco para que te des cuenta que déjame sumar 20. Se puede ver que ahora hay una brecha. De acuerdo, así que has aprendido que puedes alinear los elementos dentro de una pila, y también puedes agregar espaciado entre elementos en una pila. Pero quiero mostrarles otra forma de organizar elementos dentro de una pila. Para hacer eso, voy a cambiar esta pila en V stack. Entonces vamos a conseguir algo así. Ahora digamos que quería que este logotipo estuviera en la parte superior, y quería que mis dos etiquetas de texto aquí estuvieran en la parte inferior. Una forma en que podría hacerlo es realidad agregando espaciado en mi pila v, ¿verdad? Entonces digamos que agrego un 100. Se puede ver que están empujados a pedazos. Si puedo sumar más, 300. Pero este es un valor fijo. Y como saben, hay una tonelada de diferentes tamaños y resoluciones de pantalla. Entonces esta no es una buena manera de acercarla. Déjame deshacerme de este valor de espaciado. En cambio, lo que podemos usar es un elemento llamado espaciador. Entonces déjame mostrarte cómo funciona eso. Entre el elemento de imagen y la pila H que contiene los dos elementos de texto. Voy a insertar un elemento espaciador. Y el nombre de este elemento es espaciador, seguido de dos corchetes redondeados. Lo que hace este elemento espaciador es ocupar todo el espacio disponible. Simplemente se expande y empuja todo. Para que veas, aquí tengo la imagen. Tengo el espaciador ocupando tanto espacio como pueda. Y luego mi pila H que contiene los dos elementos ahí. Lo genial del elemento espaciador, sin embargo, es que juega bien con otros elementos espaciadores en la misma pila. Entonces si subo aquí arriba por encima del logo y agrego otro elemento espaciador, lo que termina pasando es que los dos elementos espaciadores ocupan una cantidad igual de espacio. Se puede ver arriba y abajo el logotipo de guerra, hay una cantidad igual de espacio. Si añado un tercer elemento espaciador debajo de mi pila H, ¿qué crees que va a pasar? Bueno, los tres espacios donde los elementos van a compartir el espacio en blanco disponible. Entonces los primeros elementos espaciadores aquí, el segundo aquí, y el tercero está ahí, y todo está teniendo una cantidad igual de espacio. Esta es una gran manera de espaciar las cosas por igual. Ahora de hecho, podría hacer lo mismo con mi pila H en lugar de especificar el espaciado aquí. Y fíjate en esta ocasión sólo voy a borrar ese espaciado 20 ahí. En lugar de cambiarlo en el Inspector. Puedo agregar un espaciador ahí. Yo voy a copiar eso. Y se puede ver aquí ocupa todo el espacio disponible, empujando mis dos etiquetas por un lado. Pero si agrego uno aquí del lado derecho, lo va a empujar hacia el medio. Y luego si agrego uno en el medio, entonces lo va a hacer todo equidistante. Impresionante. Aprendiste a usar la imagen y el espacio para los elementos además del elemento de texto. También aprenderás a usar los contenedores Stack, HCI Stack y zed stack. Que la próxima vez que nos sentemos juntos, estaremos construyendo la interfaz de usuario del juego duro. 6. 05: construir el juego de cartas de guerra: Hola y bienvenidos. En esta lección, estaremos construyendo la interfaz de usuario del juego de cartas de guerra. En realidad, voy a conseguir que lo construyas tú mismo primero porque creo que puedes hacerlo. Vamos. Te voy a empezar. Le das un intento honesto y luego pasaremos por la solución juntos. Trato. Vamos, tienes esto, hagámoslo. De acuerdo, entonces vamos a empezar con un proyecto Xcode, lanzar Xcode, y vamos a crear un nuevo proyecto Xcode. Vamos a elegir app bajo iOS. Y puedes nombrar a esto lo que quieras. Pero voy a llamar a este reto de guerra porque eso es lo que es y es un reto que confío en que puedas hacer. Interfaces Swift UI ciclo de vida es la aplicación de UI rápida y el lenguaje es Deja el resto sin control, y vamos a guardarlo en algún lugar. Entonces lo voy a guardar en mi escritorio. Muy bien, aquí está nuestro nuevo proyecto Xcode. Vamos primero a la biblioteca de activos porque vamos a sumar todos los activos de imagen que necesitamos para esta app. Si entras a la carpeta Recursos del curso bajo esta lección específicamente vas a encontrar un archivo zip con todos los activos de imagen. Así que adelante y descomprima eso. Y luego arrastremos todos estos activos a la biblioteca de activos. Ahora debes tener el dorso de tarjeta, el fondo para toda la app. Y luego deberías tener tarjetas de dos a 14 y no, no te falta el carrito número uno. El as es carbono-14. Y la razón por la que los numeré de esta manera es porque vamos a usar este número al final de los nombres de las tarjetas aquí para representar el valor. Y vamos a comparar este valor para ver qué carta vence a la otra. Y luego vamos a tener una imagen de botón de trato y una imagen de logotipo. Ahora por si acaso no lo mencioné antes, tenemos tres tamaños diferentes para cada imagen porque hay diferentes resoluciones de pantalla para dispositivos iOS. Por lo que todos los dispositivos más nuevos tienen pantalla súper retina y así están usando los a3x y no creo que realmente hagan dispositivos que usen ya el activo de una imagen. Pero esta app era de hace mucho tiempo y hemos reconstruido en muchos momentos diferentes, así que todavía tenemos los tres. Ahora déjame mostrarte la interfaz de usuario terminada. Y este es el resultado final que vas a intentar lograrte. Esto es lo que parece. No pongas demasiada atención al espaciado siempre y cuando tengas todo generalmente en el lugar correcto. Creo que eso es genial. Otra cosa a mencionar es que se supone que esto es un botón, pero como aún no hemos pasado por botones, siéntete libre de usar un elemento de imagen para eso. Y eso será perfecto para cuando hagamos la transición al uso de botones. Y puedo mostrarles cómo cambiar ese elemento de imagen a un botón. Otra cosa que tengo que mencionarles es el concepto del área segura. Ahora, el área segura es esta región que empieza por aquí justo debajo de ellos muesca, y termina justo aquí arriba Este pequeño manillar. Y en algunos casos, realidad hay márgenes en el lado izquierdo y derecho también. Y cualquier cosa dentro de esta región está en la zona segura. Ahora se garantiza que no se obstruya esta zona. Cualquier cosa fuera de la zona segura. Por lo que cualquier cosa en esta esquina o en esta esquina podría quedar obstruida como se puede ver por iconos o por el tiempo. Y obviamente hay este manillar aquí que podría estar bloqueando las cosas también. Si quieres un fondo de pantalla completa, como este fondo verde que tenemos aquí, vas a tener que ignorar el área segura porque por defecto, al agregar elementos a la vista, tratará de mantenerse dentro de la zona segura. Entonces hay un modificador que aún no te he mostrado. Se llama ignorar área segura que puedes aplicar a una imagen que le permitirá estirarse más allá del área segura que llegue a los bordes. Y esa es probablemente la única otra pieza de información faltante que necesitas. Aparte de eso, has aprendido sobre pilas, has aprendido sobre elementos de imagen y texto, todo lo que podrías necesitar para construir esta interfaz de usuario. Así que adelante, pausa este video y pruébalo tú mismo. Y luego después, volveremos juntos y os guiaré por cómo construir esto. Así que bienvenido de nuevo. ¿ Cómo hiciste pudiste construir esta interfaz de usuario? Enhorabuena, si eres capaz de construir esto o algo que se asemeje a esto. Y si te quedaste atascado o no pudiste no preocuparte porque vamos a pasar por ello ahora. Y muchas veces me parece que si lo intentas tú mismo y se atasca y luego más adelante encuentras la solución. Esas son muchas veces las mejores experiencias de aprendizaje. Muy bien, pasemos por esto juntos ahora. Ahora antes de sumergirnos y empezar a construir esta interfaz de usuario, quiero tomarme un momento para una especie de desglosar qué elementos puedo ver aquí. Entonces en primer lugar, puedo ver que vamos a necesitar un stack zed porque. Tenemos una imagen detrás de todos estos elementos. Y así como esa pila nos va a permitir posicionar elementos uno encima del otro. A continuación, tenemos una pila V donde los elementos se apilan uno encima del otro verticalmente. Por lo que puedes ver una pila V corriendo a través de toda esta interfaz de usuario de arriba a abajo. Ahora algunos de los elementos de esta pila V en realidad estarán contenidos dentro de una pila H, como estas dos cartas lado a lado, por ejemplo. Y este elemento aquí abajo va a ser una pila H de pilas TUV. Por lo que se trata de una pila V que contiene los dos elementos de textos. Esta es una pila V que contiene los dos elementos y luego los encapsula en una pila H. Entonces ese es el desglose que veo. Y ahora vamos a saltar a nuestra vista de contenido dot swift, y lo construiremos. Muy bien, Así que aquí estoy mirando el contenido Vue.js Swift. Lo primero que voy a hacer es cambiar este simulador a iPhone 11. Y vamos a golpear Reanudar. Y en unos segundos, el tiempo podría ser más largo, verá aquí un adelanto. Perfecto. Ahora vamos a cambiar este elemento de texto predeterminado. Deshazte de eso. Pongamos ahí una pila z, abran un par de soportes rizados. Ahora, lo que está sentado detrás de todos esos elementos es una imagen. Y la imagen que tenemos se llama fondo. Observe que no llega hasta la cima. Ahora sí se superpone un poco esa zona segura. Dije que el área segura estaba debajo de la muesca justo aquí. Entonces sí ves que se desborda, pero realmente no va todo el camino hasta ahí. Por lo que podemos agregar un modificador llamado ignora área segura. Cuando haces eso, sólo va a cubrir todo. Tan bien. Entonces, ¿qué va a estar encima de este fondo? Bueno, como dije antes, vamos a tener una pila vertical que contenga todos esos elementos. El primero siendo el logo. Y luego vamos a tener una pila H con dos cartas y luego un elemento de imagen que representa el botón de reparto. Y después de eso vamos a tener las pilas verticales de marcador en una pila horizontal. Entonces déjame, déjame escribir esto para que tenga un poco más de sentido. Empecemos con el logo en la parte superior. Vamos a tener una imagen y nuestro nombre de activo de imagen es logo. Por lo que puedes verlo solo aparece al tamaño correcto ahí. Y eso se debe a que nuestro activo de imagen es de ese tamaño. De acuerdo, ahora pongamos una pila H aquí. Y aquí dentro vamos a poner dos elementos de imagen más. Vamos a poner el, pongamos tarjeta también. Y luego tarjeta tres. Por lo que tenemos dos cartas en una pila H. Y después de eso, vamos a poner otro elemento de imagen. Y este va a ser el botón de trato. Y ahora vienen las etiquetas de puntuación. Entonces va a ser una pila H. Pero dentro de la pila en realidad tenemos dos V's. Gracias. Cada VSAT contiene dos elementos de texto. Entonces vamos a tener a Jugador y vamos a tener el puntaje real. Y luego para este, vamos a tener CPU. Y vamos a tener el puntaje real, la CPU. Por lo que básicamente tenemos dispuestas todos nuestros elementos. Ahora, vamos a agregarles algo de espaciado. Entonces para hacer eso, podemos usar espaciadores. Entonces empecemos agregando un espaciador justo arriba, justo encima de la pila H de las dos tarjetas debajo de la imagen del logotipo. Entonces voy a poner un elemento espaciador ahí mismo. Y lo que aprendiste sobre los elementos espaciadores, ¿verdad? Ocupa todo el espacio disponible. No obstante, si tienes múltiples elementos espaciadores en el mismo contenedor, va a dividir uniformemente ese espacio entre los dos espaciadores. Entonces voy a poner otro espaciador justo debajo de las cartas. Por lo que ahora se puede ver que hay dos igual cantidad de espacios. Voy a poner otro espaciador debajo del botón de trato o imagen por ahora. Y luego voy a poner un espaciador debajo de las etiquetas de puntuación. Entonces debes asegurarte de que no lo pongas en el lugar equivocado aquí. Queremos ponerlo debajo de esta pila H. Y si haces clic en este corchete final, puedes ver que Xcode ilumina brevemente los corchetes de inicio para que puedas verificar que ahí es donde lo quieres. De acuerdo, y lo último que hay que hacer es poner un elemento espaciador por encima del logo de pensamiento. Entonces eso es justo aquí. Ahora desde un punto de vista vertical, todo está bien espaciado. Para este H apilar con las dos cartas. ¿ Por qué no ponemos algunos espacios ahí dentro? Entonces, empecemos poniendo un espaciador entre las dos cartas. Y luego el espacio ella ante todas las cartas y el espaciador después de las cartas. Vamos a hacer lo mismo con las etiquetas de texto aquí abajo. En esta pila H. Vamos a poner un espaciador entre el impuesto de los dos V's. Y luego vamos a poner un espaciador ante TI. Y el espacio o después de él. Muy bien, y ahora lo último que hay que hacer es sólo cambiar los colores de las fuentes de estos elementos de texto. Y también para cambiar sus pesos de fuente y tamaños de fuente. Y tal vez añadir un poco de espacio entre el marcador y el sello. De acuerdo, Así que vamos a dar click en este elemento de texto y echar un vistazo a lo que podríamos hacer. Por lo que si buscas en el panel inspector la fuente, puedes elegir uno de estos tamaños de fuente predefinidos. Para este, elijamos titular. Y lo puedes ver. Ahí se pone un poco más audaz. Cambiemos esto a blanco. Vamos a hacer lo mismo para la etiqueta de la CPU. Vamos a cambiarlo a titular. Vamos a cambiar el color a blanco. Entonces para la puntuación real, vamos a cambiar la fuente a, digamos subtitular. Y vamos a cambiar el color a blanco también. Y para esa etiqueta de marcador, lo vamos a cambiar a subtitular, y lo vamos a cambiar a blanco también. Está bien, y si quisiéramos hacerlo en realidad, creo que en la interfaz de usuario original lo tenía como título grande. Entonces voy a cambiarlo a eso. Entonces voy a cambiar el 0 de subtitular a título grande. Ahora con el fin de sumar algo de relleno entre la etiqueta y la puntuación aquí. Lo que puedes hacer es elegir la etiqueta. Empecemos con el jugador aquí. Y vamos a dar click en sólo este relleno de fondo. Entonces habilite eso. Y entonces puedes cambiar ese número a, digamos 20. Se puede ver ese aumento. Y eso parece un poco demasiado. Entonces tal vez nos quedemos con 10. Haremos lo mismo con la CPU aquí, y haga clic solo en el relleno inferior, y luego agregaremos 10. Aquí puedes ver el código correspondiente. Está agregando relleno, pero está especificando solo para el borde inferior y en 10 puntos. Y esta es una buena práctica en cualquier momento que modifique algo, visualmente, agregando un modificador o cambiando algo en el panel inspector aquí, Es una buena práctica echar un vistazo a lo que ha cambiado en el lado de código, solo para que puedas recordar con el tiempo, cuanto más lo veas, más recuerdas eso, oye, si quisiera cambiarlo a una fuente de estilo titular, solo tendría que agregar un modificador de fuente de punto y pasar en una opción titular. Lo mismo para el color de primer plano para este elemento de texto, primer plano de punto, color blanco punto. No necesitas intentar memorizarlo, pero solo ponle atención. Y con el tiempo, sólo vas a recordar. Y teclearlo terminará siendo más rápido que tener que hacer clic visualmente y configurar las cosas a través del panel inspector o el lienzo de vista previa. De acuerdo, lo último que hacer, asegúrate guardar el proyecto y listo. Entonces en esta lección, construiste la interfaz de usuario del juego de cartas de guerra, pero para responder a interacción del usuario y cambiar programáticamente las imágenes de las cartas, vamos a tener que aprender algo de programación rápida. Entonces en las próximas cuatro lecciones, te van a introducir los conceptos básicos de codificación con Swift. Ahora si esta es la primera vez que aprendes a codificar, tómalo despacio y no intentes memorizar ninguna de las palabras clave. Y después de eso, vamos a volver a esta interfaz de usuario de juego de cartas de guerra y darle vida con código. Está bien, nos vemos ahí. 7. 06: constantes y tipos de datos de datos: Hola y bienvenidos. En esta lección y en las siguientes tres, vas a estar aprendiendo los conceptos básicos del lenguaje de programación Swift. Ahora estas son las habilidades que vas a tener que tener para completar el juego de cartas de guerra, así como la build the feature app que vamos a hacer juntos. Ahora si nunca has codificado antes, sé que esto podría parecer un poco intimidante, pero de verdad quiero que te quedes con esto y realmente pongas mucha atención. De hecho, abre Xcode en tu propia máquina y escribe exactamente lo que te estoy mostrando. Esto realmente va a ayudar a reforzar la estructura del lenguaje y todas las palabras clave. No hay necesidad de memorizar nada en absoluto. Te garantizo que al final de este módulo, estarás escribiendo tu propio código Swift. Muy bien, vamos a sumergirnos. Quiero empezar por mirar el ciclo de vida de View Update de una aplicación sencilla y mostrarte dónde el código Swift juega un papel en cada parte del ciclo de vida. Empecemos con lo que ya aprendiste en las lecciones anteriores que la interfaz de usuario se genera a partir del código Swift. Llamaremos a esto tu código de vista. Genera una UI para que tu usuario la vea. Ahora típicamente con una app, tenemos algún tipo de datos que queremos recuperar y mostrar. Por ejemplo, una app de noticias. Nos gustaría obtener esos datos de una fuente de datos para luego recuperarlos en nuestra aplicación y mostrarlos en nuestra interfaz de usuario. Puedes usar el código Swift para esto. El código rápido puede ir a buscar los datos para luego procesarlos en un formato que nuestra app pueda entender. Después usando código Swift, también podemos vincular estos datos a nuestro código de vista para que cuando la interfaz de usuario se renderiza desde ese código de vista, esos datos se puedan mostrar al usuario. Y además, cuando el usuario interactúa con la interfaz de usuario, como tocar un botón, podemos usar el código Swift para capturar ese evento y responder a él. Ahora basado en lo que el usuario tocó, podríamos usar algún código Swift para cambiar nuestros datos. Cuando este cambio de datos ocurre porque hemos vinculado esos datos a nuestro código de vista. Que los cambios de datos se detectan automáticamente y la nueva interfaz de usuario se vuelve a representar con los datos actualizados para que el usuario pueda ver lo que ha cambiado. Ahora este ciclo es esencialmente todo lo que la aplicación está haciendo una y otra vez. Y exploraremos esta App, Ver, Actualizar ciclo de vida con más detalle en futuras lecciones. Pero por ahora, solo quiero que entiendas que el código Swift tiene un papel que desempeñar en cada parte de este ciclo de vida. De las últimas lecciones, ya has visto el código para construir UI. Entonces sabes como se ve ese código de vista. Cambiemos nuestro enfoque hacia la parte de datos donde podemos ver qué código Swift se utiliza para realizar un seguimiento de los datos. Además, ¿cómo se ve eso incluso en nuestra app? Para probar algo del código rápido y encontrar la respuesta a nuestra pregunta, usemos un patio de juegos Xcode. Un patio de recreo es una forma ligera probar parte de nuestro código sin comprometernos con un proyecto de app de pleno derecho que podemos hacer aquí. Piénsalo en el patio de recreo de Xcode como tu pad de doodle, pero para el código, ahora solo empieza uno nuevo. Ir a Archivo, dar click en Nuevo, y luego vamos a dar click en patio de recreo. Vamos a elegir un patio de juegos en blanco. Y vamos a darle un nombre. Y vamos a guardarlo en algún lugar. Vamos a cerrar esta pestaña del navegador haciendo clic en este botón porque no necesitamos eso. Ahora, aquí abajo en la esquina inferior izquierda, notarás que tenemos un botón llamado mostró el área de bichos. Adelante y haz clic en eso para revelar esta bandeja. Esta zona de consola del depurador es donde vamos a generar una gran cantidad de datos. Así que sólo enciéndalo, asegúrate de ver esta pequeña área aquí abajo. Y luego este botón, quiero que le den click en este momento va a estar ejecutando el patio de recreo. Va a correr todas las líneas de código en el área del editor aquí arriba. Observe, sin embargo, que también tiene este pequeño botón Run azul a lo largo de los números de línea. Y esto te permite seleccionar hasta qué línea quieres ejecutar el código. Entonces si paso el cursor sobre la línea tres y apreto el botón justo aquí, va a correr las líneas 123 en contraposición a este botón de aquí, que corre todo. Por lo que la primera vez que corras este patio, podría tardar un tiempo. Se muestra el spinner hasta por un minuto. Yo quiero que hagas eso y solo déjalo correr hasta que diga listo para continuar. Y eso nos va a configurar para ejecutar algún código en la siguiente parte. Por ahora, solo sigamos adelante y eliminemos estas líneas de código para que podamos empezar de nuevo. De acuerdo, ahora que tu configuración, Volvamos a nuestra pregunta original. ¿ Qué aspecto tienen los datos y cómo usamos el código Swift para realizar un seguimiento de ellos? Echemos un vistazo a un par de tipos diferentes de datos. En primer lugar, empecemos con un tipo de datos común, un trozo de texto. En Swift, rodeas textos con comillas como esta. Y esto se conoce como una pieza de datos de cadena. Añadamos una nota para nosotros aquí arriba con dos barras inclinadas hacia adelante. Cuando haces eso, se llama comentario, y es una forma de dejar unanota o un trocito de documentación paraque nos nota o un trocito de documentación para recuerdemos a nosotros mismos o a otras personas que podrían estar mirando nuestro código, lo que hace ese código. Y cuando Xcode ve estas dos barras inclinadas hacia adelante, no va a ejecutar esta línea. Ahora echemos un vistazo a otro tipo de datos, enteros. Entonces algo que se ve así. En Swift, esto se conoce como int, abreviatura de entero. ¿ Y qué pasa con los números decimales? Bueno, sí, ese también es un tipo de datos que Swift puede reconocer y manejar. Cada uno de estos. Se les conoce como doble. Y swift también puede manejar valores booleanos. Entonces las cosas como verdaderas y falsas. En Swift, esto se conoce como bool. Ahora string, int, double y bool. Todos estos se llaman tipos de datos y es como Swift clasifica los datos. Ahora estos no son todos los tipos de datos que están disponibles, pero estos son los, con mucho los más comunes que usarás, al menos al principio. Y es un gran punto de partida para nosotros. Muy bien, ahora echemos un vistazo a crear y hacer un seguimiento de los datos. En Swift, hay muchas formas de hacer un seguimiento de los datos, pero dos de ellas son formas básicas están usando variables y constantes. Volvamos a nuestro patio de juegos Xcode y echemos un vistazo a un ejemplo. Empecemos con nuestros datos de cadena hola aquí. Ahora esta pieza de datos por sí misma va a ser inútil nosotros a menos que tengamos una forma de referenciarlo y rastrearlo. Y podríamos hacer esto con una variable. Entonces vamos a ver cómo podemos declarar una variable para hacer un seguimiento de esta hola pieza de datos. Entonces usamos la palabra clave var y eso es para declarar una nueva variable. Y luego escribimos el nombre de la variable. Este nombre es lo que vamos a usar para hacer referencia a esa pieza de datos y recordarla. Entonces voy a llamar a este MyVar, y luego lo seguimos con dos puntos. Y luego después de eso ponemos el tipo de datos que esta variable va a rastrear. Dado que los datos que queremos hacer referencia son una pieza de datos de cadena, voy a poner string aquí. Y luego a continuación, solemos en la misma línea que declaramos la variable, asignamos los datos a la variable para realizar un seguimiento de. Y lo podemos hacer usando el operador de asignación, que es sólo un símbolo igual. Y luego del lado derecho de eso, ponemos los datos que queremos asignar a esta variable. Voy a tomar eso y mover eso aquí mismo. Entonces esencialmente lo que esta línea de código está diciendo, estamos declarando una nueva variable llamada MyVar. Estamos diciendo que hace un seguimiento de los datos del tipo de cadena. Y entonces estamos asignando este dato de cadena hola a esa variable. Es como si estuviéramos adjuntando una etiqueta a esta pieza de datos llamada MyVar. Ahora siempre que quiera referirme a esa pieza de datos, todo lo que necesito hacer es referirla por el nombre de la variable. Entonces vamos a intentarlo. Podemos utilizar un comando especial que emitirá los datos al área de la consola de abajo aquí en el patio de recreo. Y ese comando se acaba de imprimir seguido de dos corchetes redondeados. Y en medio de esos corchetes pones la variable o los datos que quieras generar . Entonces yo voy a hacer eso. Y luego aquí abajo voy a detener mi patio de recreo y volver a ejecutar todo el código que hay en él. Y luego como se puede ver ahí abajo y dice hola, que el contenido de MyVar, que es exactamente lo que esperaríamos. Observe que cuando hago referencia a mi variable, ya no necesito usar la palabra clave var. Eso fue sólo para declarar la variable. Y una vez que haya declarado mi variable, sólo puedo referirla por su nombre final. También puedo reasignarle nuevos datos. Puedo usarlo una y otra vez. No tengo que reesclarecerlo. Entonces por ejemplo, después declararlo un hola asignado a ella, puedo dar la vuelta y asignarle algo más. Asignemos esta pieza de datos de cadena llamada mundo a MyVar. Y esencialmente lo que hemos hecho aquí es que le hemos dicho a esa variable en su lugar que rastree esta pieza de datos. Entonces, ¿qué esperarías si ahora ejecuto el código en el patio de recreo? Solo saldríamos mundo porque MyVar ya no está rastreando esa pieza de datos hola. Ahora una cosa que quiero enfatizar es el tipo de datos de la variable. Si especifico que myVar es un tipo de cadena, solo puedo rastrear piezas de datos de cadena. Entonces, por ejemplo, si tenía un entero como 100 y traté de asignarle eso a MyVar, bueno, obtendré un error que no está permitido. Lo que necesito hacer en su lugar es declarar una nueva variable del tipo int para realizar un seguimiento de esta pieza de datos int. Entonces sigamos adelante y usemos la palabra clave var y nombrela. Y luego colon y luego el tipo de datos que quiero que esto rastree. Y ahora eso está completamente bien. Intentemos imprimirlo. Xcode no te va a ayudar a corregir auto ningún error ortográfico. Muy bien, Así que tenemos mundo y 100. Ahora como estamos codificando más juntos, empezarás a notar diferentes tipos de convenciones de nomenclatura como lo que ves aquí donde mis nombres de variables comienzan con una letra minúscula, y entonces cada palabra subsiguiente en mi nombre de variable comienza con una letra mayúscula. Entonces eso es una especie de convención de nomenclatura estándar. De verdad podrías hacer lo que quisieras. Pero cuando comienzas a codificar más y a trabajar en equipos, es importante tener. Estándar que todos usan, y éste es uno común. Muy bien, Ahora una cosa más de la que quiero hablar antes de pasar al siguiente tema es el hecho de que hay cortos en Xcode. Realmente no tienes que teclear toda la información. Por ejemplo, aquí, estamos declarando que esta variable, mi int, es un tipo int y le estamos asignando datos enteros. Pero la cosa es en realidad podríamos omitir ese tipo de datos y simplemente asignarlo 102. Cuando hacemos eso, Xcode puede ver que se trata de una pieza de datos int. Entonces va a asumir que mi int sólo va a rastrear en tipos. Ahora sigue aplicándose esa misma regla. Es decir, después de que Xcode infiera que esta variable es n-type porque le has asignado 100. No puedo ir y asignarle una cadena. Eso no se va a permitir porque Xcode lo es, ya ha detectado que esto debería ser un n-type. Entonces lo mismo va para aquí arriba. No necesito especificar el tipo de datos. Si voy a asignarle una pieza de datos de cadena de inmediato porque eso le dice a Xcode que esta va a ser una variable de tipo string. Entonces eso es solo un poco de taquigrafía para ahorrarte algo de mecanografía. De acuerdo, entonces aprendiste a declarar una nueva variable, asignarle datos y recordarlos usando el nombre de la variable. Y también aprendiste a asignar nuevos datos a esa variable. Hablemos de la otra forma de hacer un seguimiento de los datos. Constantes. Por lo que las constantes son igual que las variables excepto que no puedes reasignarle datos una vez que le hayas asignado la primera pieza de datos. Entonces sigillata, cómo declarar una constante para hacer un seguimiento de estos datos de cadena. En lugar de la palabra clave var, se utiliza la palabra clave let. Y entonces el resto es igual que una variable. Entonces empezamos con un nombre constante, mi colon, y luego adivinaste que el tipo de datos seguido por el operador de asignación. Y luego vamos a mover esa pieza de datos al lado derecho de ese operador de asignación así. Ahora intentemos referirnos a esta constante. Intentemos imprimir los datos en mi contexto. Como se puede ver, funciona como se esperaba. Ahora, intentemos hacer lo que no está permitido. Tratemos de asignarle algo más. Y como se esperaba, no podemos reasignarle datos porque es una constante. Ahora las constantes son útiles. Se trata de una herramienta adicional que podemos utilizar si no esperamos que esa pieza de datos cambie. Y así no necesitamos hacer ningún cambio en él nunca. Entonces, ¿cuándo usarías una constante sobre una variable? Bueno, realmente depende de lo que intentes hacer. Probablemente te encuentres usando variables la mayor parte del tiempo por su versatilidad y porque los datos cambian, sin embargo, la mejor práctica es preferir constantes sobre variables donde hace sentido. De hecho, Xcode es lo suficientemente inteligente como para saber si usas una variable y nunca terminas cambiando esa variable, te sugerirá que cambies esa palabra clave var a una palabra clave let y usas una constante en su lugar. Muy bien, hagamos un resumen rápido antes de terminar la lección, aprendiste sobre el ciclo de vida de View Update y cómo el código Swift juega un papel en él. Aprendiste sobre tipos de datos como string, int, bool, y double. Aprendiste sobre cómo usar variables y constantes para hacer referencia a datos. Estás haciendo grandes avances hasta ahora. Y en la siguiente lección, te enseñaré cómo organizar tus declaraciones de código en funciones. Está bien, nos vemos ahí. 8. 07: funciones de programación rápida: Hola y bienvenidos. En la lección anterior, aprendiste sobre las variables y constantes de Swift. Aprenderás a crear algunos datos y declarar una variable o constante para realizar un seguimiento de los mismos. Si bien en esta lección vas a aprender a organizarte, agrupa tus declaraciones de código. De modo que ese número uno, todas las sentencias de código que has agrupado pueden trabajar juntas para una tarea común. Y número dos, una vez que tu código está organizado en grupos, puedes elegir qué grupo de abrigos cosas ejecutar dependiendo de qué tarea necesitas hacer. Estos grupos tienen sentencias de código se conocen como funciones en Swift. Muy bien, ahora echemos un vistazo al diagrama de ciclo de vida de actualización de vista de la lección anterior y veamos dónde las funciones podrían desempeñar un papel en este ciclo de vida. Recuerda que cuando el usuario interactúa con la interfaz de usuario, código Swift captura ese evento y reacciona ante él. Bueno aquí podríamos tener un par de funciones diferentes dependiendo de cómo interactúe el usuario con nuestra interfaz de usuario. Por ejemplo, el usuario tocando un botón podría activar la aplicación para cambiar de pantalla. En ese caso, tal vez ejecutemos la función a para realizar esa tarea. O por otro lado, ¿y si el usuario toca un artículo para ver más detalle? Entonces en ese caso, ejecutaremos función B para que aparezca la pantalla de detalles. Ahora repasemos el código que realiza la recuperación de datos. Por ejemplo, podríamos tener una función C que hace la recuperación real de los datos, tal vez el código de red. Y agarra los datos y luego lo da a la función D como entrada. Y la responsabilidad de esta función podría ser procesar esos datos y convertirlos en un formato que nuestra app pueda entender. Por lo que la función D toma esos datos como entrada y salida los datos formateados para nuestra aplicación. Ahora podría seguir, pero como pueden ver, las funciones son un componente básico de la programación rápida. Está en todas partes. Entonces ahora vamos a ver cómo podemos crear nuestras propias funciones. Muy bien, entonces aquí tengo un nuevo patio de juegos Xcode y vamos a echar un vistazo a la sintaxis de la función. Y por si acaso no he explicado eso aún, la palabra sintaxis es simplemente una palabra que describe la estructura o la gramática del lenguaje. Entonces, sintaxis de función para declarar una nueva función, se empieza con la palabra clave func FUN, ver. Es una función funky. Y luego lo sigues por el nombre de la función. Y luego un conjunto de paréntesis son corchetes redondeados, y luego un conjunto de corchetes rizados. Dentro del conjunto de corchetes rizados, pones tus sentencias de código, cualquier cosa que quieras ejecutar o ejecutar siempre que llamemos a esta función. Entonces, permítanme sólo poner algunas declaraciones aquí. Digamos que declaremos dos constantes como esta, y luego imprimamos un plus b Entonces si ejecuto esto ahora mismo y ejecuto todas estas líneas de código, no va a pasar nada. No se ve ninguna salida. Y eso es porque en realidad no hemos llamado a esta función. Para poder llamar y ejecutar esta función, sólo tenemos que referirla por el nombre de la función. Entonces esa es mi FUN, C, seguido de los paréntesis de par, y así es como ejecutas todo el código entre aquí. Entonces probemos esto. Voy a dejar de ejecutar y luego volver a ejecutar mi patio de recreo. Y obtenemos 30 como esperamos. Si quería volver a ejecutar esos conjuntos de instrucciones, entonces simplemente puedo llamarlo de nuevo. Y si lo imprimo, ahora ejecuta ese código dos veces. Ahora quiero volver a ese diagrama de ciclo de vida de actualización de vista por tan solo un segundo. Porque si te das cuenta de nuevo en ese área de recuperación de datos, dije que podríamos tener dos funciones, c y funciones dy, donde C buscaría los datos y los pasaría a D como parámetros de entrada. Para que esa función D pueda funcionar con esos datos y formateó cómo necesitamos. Por lo que una función poder aceptar datos en ella para trabajar con ella es una característica muy poderosa. Echemos un vistazo a cómo declararíamos una función que aceptaría algún tipo de datos de entrada. De acuerdo, así que voy a borrar estas dos líneas y voy a modificar mi función aquí. En lugar de declarar dos constantes, a y b, voy a especificar que a y b tienen que pasarse a la función. Entonces la forma en que hacemos eso es a través del uso de parámetros de función entre los dos corchetes redondeados. Ahí es donde especificaríamos todos los parámetros que queremos que se pasen a esta función. Se puede pasar en múltiples parámetros, pero en realidad sólo empecemos con uno y empecemos con una.Así que primero pondría el nombre del perímetro, así que me gustaría que fueran ocho. Y entonces pondría colon especificado por el tipo de datos que es este parámetro. Ya que espero que esté en, voy a declarar este parámetro como un seguido del tipo de datos int. Y entonces puedo borrar esta constante desde aquí. Como se puede ver, esto es casi como una declaración variable o una declaración constante excepto sin la var y sin la izquierda. Aquí estamos especificando que cada vez que se llama a esta función, se necesita pasar un parámetro int junto con ella. Y va a ser referenciado por este parámetro nombre a dentro de esta función. Entonces ahora se puede ver que en ninguna parte declaré una variable a o constante a, pero todavía puedo poner un como parte de mi ecuación un plus B porque se está pasando como parámetro. Entonces echemos un vistazo a cómo sería llamar a esta función. Ahora, voy a depender de auto-completar. Entonces voy a escribir en MI DIVERSIÓN y puedes ver en cuanto lo haga, detecta mi función aquí. Entonces voy a seguir adelante y hacer clic en eso. Y se puede ver que ahora, en el proceso de llamar a esta función, también tengo que pasar una pieza entera de datos. Entonces voy a seguir adelante y pasar en esto, pasando algo diferente en el pasado y cinco, se puede ver aquí, ahí indica que este es el parámetro que estoy pasando. Sigamos adelante y detengamos y ejecutemos y corremos de nuevo mis líneas de código. Y esta vez la salida es de 25, porque 5 se estaba pasando a la función. Plus 20 es 25. Ahora volviendo al diagrama de ciclo de vida View Update nuevamente, función D acepta entrada como parámetro, pero también devuelve salida. Por lo que esa es otra característica muy poderosa de las funciones. Poder tomar alguna entrada, trabajar con esos datos y proporcionar alguna salida de nuevo al color de la función. Echemos un vistazo a nuestro patio de recreo y veamos cómo podemos especificar que una función debiera devolver algunos datos. Por lo que modificar esta función para indicar que devolverá algunos datos. Subimos aquí justo después del soporte redondeado para el perímetro, y justo antes del inicio de los soportes rizados. Aquí, escribimos un guión seguido de un símbolo mayor que, lo que hace una especie de salida como una flecha. Y luego especificamos el tipo de datos de la salida. Entonces lo que voy a hacer es que voy a emitir la suma de a y B en lugar de imprimirla a la consola. Entonces voy a borrar esta línea. Y luego voy a dar salida a un int. Entonces ahí es donde especifico que después de ese guión mayor que símbolo. Ahora puedes ver que Xcode lanza algunos errores ahora porque además de especificar que tu función devuelve un int, en que tu función devuelve un int, realidad tienes que devolver un int dentro de las sentencias de código. Entonces como última línea de nuestro código, podemos usar la palabra clave return, lo que significa que estos son los datos que vamos a devolver de la función. Y luego especificamos los datos que queremos devolver. Entonces voy a devolver un plus b. Y todo es, bueno, ahora ten en cuenta que cualquiera que sea el tipo de datos que especifiques aquí arriba en la declaración de función, ese es el tipo de datos que tienes para regresar si hay un desajuste. Por ejemplo, si especificé que esta función devuelve un int, pero sigo adelante y devuelvo una cadena. Al igual que un trozo de texto. Vas a ver a Xcode. Quejarse de eso también porque eso es, eso es incorrecto. Entonces vamos a devolver un plus b y vamos a devolver un int. Entonces, ¿por qué no ejecutamos ahora nuestra función y vemos qué pasa. No pasa nada. Bueno, ¿qué está pasando? Estoy regresando un plus b Así que esto es lo que está pasando. Llamar a esta función es devolver esos datos, pero necesito de alguna manera hacer referencia y rastrear esos datos, ¿verdad? Y para eso es una variable. Entonces voy a declarar una variable aquí arriba, var. Declaremos constante en realidad, ya que no voy a cambiar esto, que mi suma sea igual al resultado de esa función. Para que puedas entender esta tasa de declaración de código, estamos declarando una constante llamada mi suma. Y entonces estamos llamando a esta función en la misma línea que devuelve 25 y estamos asignando 25 a mi suma. Por lo que ahora puedo imprimir mi suma. Y volvamos a comprobar que obtenemos la salida. Ahí vamos. Ahora antes de seguir adelante, hay dos cosas muy importantes que quiero mencionar. Por lo que esta declaración devuelve realmente termina la ejecución de esa función. Entonces una vez que se ejecuta esta declaración de retorno, la ejecución regresa fuera de esa función. Entonces cualquier declaración de código que usted puso aquí abajo, digamos que yo había devuelto un b justo ahí, e imprimí un plus b justo aquí. Esa declaración de impresión no se va a ejecutar código C después de la devolución nunca se ejecutará. Entonces eso solo es importante tener en cuenta que cuando escribes retorno y ejecuta esa línea de código, la ejecución se detiene y sale de esa función. Otra cosa que quería mencionar es este tipo de devolución. Entonces antes cuando te dije que declarar una función no tenía un tipo de devolución como ese. Bueno, en realidad lo hizo. Fue sólo que el tipo de devolución era nulo. Y vacío no significa nada. Entonces déjame, déjame hacer una demostración básica en realidad déjame simplemente declarar otra función aquí abajo. Simplemente llamaré a esto un micrófono para ver entonces te dije que esto era una declaración básica de una función, pero en realidad eso fue una taquigrafía. En realidad, la declaración completa tiene un tipo de devolución de vacío como ese si no vas a devolver nada. Pero es solo que cuando no devuelves nada, entonces en realidad no tienes que especificar el tipo de retorno de vacío. Entonces, así que sólo pensé que había mencionado eso. Entonces ya sabes lo que significa esa palabra clave void. Entonces si ves alguna función que tiene un tipo de vacío de retorno, sabes que eso básicamente significa que no está devolviendo nada. Está bien, Así que ahora reiniciemos un poco. Está empezando a ponerse un poco desordenado. Entonces vamos a borrar todo excepto eso, excepto nuestra función aquí mismo. Ahora quiero mostrarles cómo podemos pasar en múltiples parámetros. Entonces en lugar de especificar estar aquí, Vamos a poner B en el listado de parámetros aquí y que se pase en su lugar. De acuerdo, entonces déjame borrar esta línea de código para que obtengamos B de aparecer. Bueno, ¿cómo agregamos otro parámetro a este? Lo que haces es simplemente poner coma y luego declarar otro parámetro para tu función. Fácil, ¿verdad? Vamos a nombrar este sea seguido de colon, y luego el tipo de datos de B, ese va a ser otro entero. Muy bien, entonces ahora echemos un vistazo a cómo llamamos a esta función con dos parámetros. Mi func, lo puedes ver aquí. No, solo especificas, oh, una cosa rápida es cuando estás llamando a funciones, una forma fácil de rellenar los parámetros en la lista es presionando tab. Eso sólo te lleva al siguiente parámetro que tienes que llenar. Entonces pondré 2 y 3. Ejecutemos todo este código y obtenemos un resultado. No obtenemos ningún resultado. Recuerda que borré mi línea de código. Entonces, ¿por qué no simplemente imprimimos el resultado en lugar de asignarlo a una variable esta vez. Entonces voy a seguir adelante y pasar directamente esa llamada de función a mi declaración de impresión. Eso va a imprimir la salida de mi función. Adelante y ejecutemos ese código y obtenemos 5. Ahora, obviamente puedes tener más de dos parámetros. Simplemente pon una coma entre cada parámetro en tu función. Y luego otra cosa que quería mencionar que es bastante guay con los parámetros, es que se puede especificar un valor predeterminado para un parámetro. Entonces, por ejemplo, para el parámetro b, podría hacer de esto un dato de entrada opcional especificando un valor predeterminado para este parámetro. Si hago eso, eso significa que cuando se llame a esta función, pasar datos para el parámetro b va a ser opcional. Echemos un vistazo a cómo funciona esto. Entonces después de especificar el tipo de datos para mi parámetro b, puedo poner un signo igual y luego puedo darle un valor. Digamos que 0 es el valor predeterminado. Si no se pasa b, entonces B sólo va a ser 0. Ahora, borremos mi llamada de función, e intentemos llamarla de nuevo y un vistazo a lo que nos muestra el menú de autocompletar. Aquí se puede ver que hay dos formas diferentes de mi función llame ahora, una es con parámetros a y b Así que paso en ambas piezas de datos. Y uno simplemente está pasando en un parámetro a. Si hago eso, v sólo va a ser 0. Pero si paso en ambos, Digamos que vuelvo a pasar 23, entonces B va a ser tres en lugar de 0. Entonces esa es una forma de hacer que tus perímetros sean opcionales. Ahora quiero hablar de etiquetas de argumento. Como se puede imaginar, cuantos más parámetros tengamos, más confusas van a ser las cosas en cuanto a estas llamadas de función, sobre todo cuando se trata de nombres de parámetros como a y B. Bueno, a veces a y B tiene sentido en el contexto del código dentro de la función. Pero al color de la función, a y B. No significan nada. Por lo que hay una característica especial llamada etiquetas de argumento. Y déjame mostrarte cómo es eso. Entonces voy a declarar una nueva función aquí mismo. Yo también lo voy a llamar mi func. Y voy a hacerlo en realidad, ¿sabes qué? Voy a copiar esta función y hacer una copia de ella y mostrarte cómo, cómo las etiquetas de argumentos la cambian. Por lo que un argumento etiquetado va delante de cada parámetro. Por lo que cada parámetro puede tener su propia etiqueta de argumento, y esencialmente estás poniendo un nombre delante de ese parámetro. Voy a llamar a este primer parámetro. Voy a darle una, una etiqueta de argumento llamada primer número. Y para mi, para el segundo parámetro, le voy a dar un argumento etiquetado llamado segundo número. Entonces eso es literalmente todo lo que es. Una etiqueta de argumento es un nombre delante del nombre del parámetro separado por un espacio. Echemos un vistazo a cómo esto afecta a la llamada de función. Si escribo mi func, puedes ver aquí todavía tengo estos dos primeros, a y B, y eso es desde la primera función aquí arriba. Pero mira aquí abajo, tengo primer número y primer número y segundo número. Y esto corresponde a mi segunda función aquí mismo, porque el segundo número sigue siendo opcional, ¿verdad? Porque tengo este valor por defecto allí. Entonces si llamo a ese. Mi llamada de función se convierte en este myfunc primer número 1, segundo número 3. No obstante, internamente dentro de esa función, sigo haciendo referencia a esos parámetros usando a y b. Así que etiquetas de argumentos ahí. Una forma de distinguir el nombre de una llamada a función versus cómo se hace referencia dentro del código. En tanto que si omite las etiquetas de argumento, como lo hemos hecho aquí arriba, entonces los nombres de los parámetros se utilizan tanto para la llamada a la función también para la referencia de esos parámetros dentro de la función. Por lo que ojalá notes la diferencia aquí. Un truco genial que puedes hacer con las etiquetas de argumento es que si no quieres mostrar ningún texto en tu llamada de función en absoluto, puedes usar un guión bajo como etiqueta de argumento. Entonces si haces esto, Veamos qué pasa con tu llamada de función. Entonces mi func, puedes ver aquí estos dos corresponden a lo que he hecho aquí mismo, usando guiones bajos para las etiquetas de argumento. Entonces si usas un guión bajo para etiqueta de argumento, las llamadas a función se convierten en myfunc. Y luego la primera pieza de datos, coma, segunda pieza de datos. No hay nombres de parámetros, no hay etiquetas de argumento en tu llamada de función en absoluto. Entonces esto hace las cosas realmente sucintas y realmente ordenadas y ordenadas, pero también hace que las cosas sean más confusas si no está claro cuáles esos parámetros que se supone que son cuatro. Por lo que aquí hay mucha versatilidad. Mi preferencia personal es simplemente hacerlo de esta primera manera. Y no suelo especificar ninguna etiqueta de argumento en absoluto. Y simplemente uso los nombres perimetrales. De acuerdo, lo último que prometí antes de terminar con funciones es que no sé si te has dado cuenta, pero aquí hemos declarado dos funciones diferentes, ambas con el mismo nombre de función. No podemos hacer eso con variables, ¿verdad? Si intentas declarar variable a y luego variable a de nuevo, entonces vas a obtener un error en el segundo. Y Xcode se va a quejar, se puede reclar la variable 8. Para funciones. Las cosas son un poco diferentes. Las funciones tienen lo que se llama firma de función. Y eso está compuesto por el nombre de la función, el listado de parámetros, y luego seguido por el tipo de retorno. Entonces tecleemos myfunc y echemos un vistazo a lo que nos da el menú de autocompletar. Como puede ver, las cuatro de estas variaciones tienen el mismo nombre de función llamado myfunc. Pero debido a que los valores de los parámetros , las etiquetas de argumento, son diferentes, Xcode es capaz de discernir y saber a qué función estamos tratando de llamar, ¿verdad? Entonces si llamo a este y no especifico ningún nombre de parámetro ni ninguna etiqueta de argumento. Sabe que estoy tratando de llamar a este segundo aquí mismo porque esta llamada de método, esta llamada de función. Es decir, no coincide con este primero. tanto que si hago mi func y especifico etiquetas de parámetros a y b, entonces definitivamente sabe que estoy tratando de llamar a la primera porque esta llamada, este listado de parámetros aquí coincide aquí. De acuerdo, así que te prometí que fuimos un poco más profundo de lo probablemente necesites saber ahora mismo mostrándote todas estas opciones y formas que las funciones pueden ser flexibles a medida que codificamos juntos más, me verás solo usando formas más básicas de funciones, pero al menos paga ahora sabes mucho más y estoy seguro de que puedes apreciar lo poderosas que son estas funciones. De acuerdo, esta lección estuvo bastante llena de acción. Hagamos una recapitulación antes de terminar la lección. En primer lugar, aprendiste a declarar unas funciones básicas, y luego aprenderás a declarar funciones que aceptan datos de entrada como parámetros. Además, aprenderás a declarar una función con múltiples parámetros. Y de nuevo, las funciones cuando casi son tan útiles si no pudiera generar datos, ¿verdad? Aprenderás a hacer eso usando tipos de devolución y la palabra clave return. También aprendiste sobre las etiquetas de argumentos. Y por último, aprendiste sobre las firmas de funciones. Estás haciendo grandes avances. Y en la siguiente lección, te mostraré cómo organizar tus funciones en dos estructuras. Entonces te veré ahí. 9. 08: estructuras de programación rápidas: Hola y bienvenidos. Hasta el momento has aprendido sobre variables y constantes y cómo se utilizan para realizar un seguimiento de los datos. También has aprendido acerca de las funciones para organizar y agrupar tienes declaraciones de código. Si bien en esta lección, vas a aprender sobre estructuras o estructuras para abreviar. Y estos son los bloques básicos para representar tus datos o para representar algo en tu app. Estructuras reúnen las funciones que variables y constantes, todo lo que has aprendido hasta ahora en las últimas lecciones, todo en un pequeño paquete ordenado. Muy bien, vamos a sumergirnos y ver de qué se trata. Ahora hagamos una recapitulación rápida. Primero, tenías abrigos, cosas como estas. Y luego te mostré cómo usar funciones para organizarlas y agruparlas. Ahora con estructuras, puedes agrupar tus funciones. También puedes tener variables y constantes, realizar un seguimiento de los datos dentro de tu estructura, pero fuera de cualquier función. Y vamos a hablar de estos un poco más adelante en esta lección. Ahora echemos un vistazo a nuestro diagrama de ciclo de vida de actualización de vista de nuevo. Para el código de vista que representa su IU, podría crear una estructura para representar su pantalla de inicio y todo el código de vista para su pantalla de inicio entraría en esa estructura. Si tuvieras una segunda pantalla en tu app, podrías crear otra estructura para esa segunda pantalla. Y todo el código de vista para esa segunda primavera entraría en esa estructura. En este caso, cada estructura representa una pantalla diferente en tu app. Ahora pasemos a la parte de recuperación de datos de este diagrama. Podría crear una estructura y llamarla gestor de datos. Y vas a poner todo el código y funciones relacionadas con la recuperación y procesamiento de los datos dentro de esa estructura de gestor de datos. En este caso, la estructura no representa un screening de su aplicación, sino que representa un componente crucial de su aplicación. Por lo que como puedes ver, las estructuras son muy flexibles y ligeras y se usan en toda tu aplicación. Ahora entremos a un patio de juegos Xcode y un vistazo a cómo podemos declarar nuestra propia estructura. Está bien, así que aquí tengo un nuevo patio de recreo vacío. Echemos un vistazo a cómo podemos definir nuestras propias estructuras. Primero, comienzas con la palabra clave struct, seguido de un espacio, y luego el nombre de tu estructura. Entonces voy a llamar a éste mi estructura. Y luego pones un espacio y abres un conjunto de corchetes rizados. Dentro de los corchetes rizados, pondrías todo el código en tu estructura, y eso es todo. Hemos declarado nuestra propia estructura. Ahora antes de seguir adelante y echar un vistazo a lo que hay dentro de la estructura, quiero señalar la convención de nomenclatura de la estructura. Observe que lo empecé con una letra mayúscula. Esta es la convención estándar. Esto es diferente a la carcasa de camello que utilizamos para las variables y constantes y los nombres de las funciones. Esos comenzaron con una letra minúscula, y tenía cada palabra subsiguiente comenzando con una letra mayúscula. En tanto que para las estructuras, comienza con una letra mayúscula y luego cada palabra subsiguiente tiene una letra mayúscula. De acuerdo, ahora que ya sabes de nombrar estructuras, vamos adentro y echemos un vistazo a cómo organizamos las cosas dentro de la estructura. Por lo que generalmente en la parte superior de la estructura, dentro de los corchetes rizados, declararíamos aquí todas nuestras variables y constantes utilizadas para rastrear datos que están relacionados con la estructura. Ahora bien, estos tienen un nombre especial, como mencioné antes, y llegaremos a eso más adelante en esta lección. Por lo que aquí arriba después de declarar todas las variables y constantes datos de seguimiento para esta estructura, la siguiente sección que tienes son todas las funciones relacionadas con la estructura. Ahora bien, no hay secciones claramente definidas en una estructura. Ya sabes, todo el código realmente sólo va entre los corchetes rizados. Pero normalmente así es como organizarías todas las diferentes piezas de código dentro de tu estructura. Entonces en la parte superior, variables y constantes, y luego en la parte inferior, todas las funciones. Entonces como puedes ver, las estructuras son geniales para agrupar funciones, las variables y las constantes están relacionadas por una cosa. Pero las estructuras suelen estar destinadas a representar algo en su aplicación en el diagrama de ciclo de vida de View Update que vio antes, vimos ejemplos de una estructura que se utiliza para representar una pantalla de su así como para representar un componente crucial de tu app como ese Network Manager. Entonces, ¿por qué no hacemos otro ejemplo, y les mostraré una estructura que es un poco más concreta. Vamos a modelarlo después de algo. Por lo que antes en el diagrama de ciclo de vida View Update, viste que podríamos usar estructuras para representar una vista en nuestra aplicación. Entonces vamos con eso. Tengamos una aplicación de chat hipotética. Y digamos que esta estructura representa mi vista de chat. Entonces voy a cambiar el nombre de mi estructura a la vista de chat. Ahora, bajo variables y constantes, podría tener una variable para hacer un seguimiento del mensaje, como el mensaje de chat que estoy escribiendo en el cuadro de chat. Entonces voy a llamar a este mensaje. Y el tipo de datos esto sería, probablemente sería una cadena. Y le voy a asignar una cadena vacía, nada entre medias, sólo dos comillas. Entonces eso es lo que se conoce como una cadena vacía. Ahora bajo funciones, podría tener grupos de código que realizarían diferentes tareas en la pantalla. Por ejemplo, tal vez cuando el usuario toca el botón de enviar chat, ejecutaría algún código para enviar el mensaje de chat al servidor. Por lo que declararía una función. Entonces eso es funk, seguido de, vamos a llamar a esto enviar chat y dos paréntesis redondeados. Y voy a abrir un par de corchetes rizados. Y dentro de aquí, pondría el código para enviar un mensaje de chat. Y luego entre las variables y constantes y las funciones, tendría el código de vista para esta pantalla y como todo el código para la IU. Por lo que ahora en esta estructura de vista de chat, tenemos un pequeño paquete ordenado que contiene todo el código para esa única pantalla. Ahora, antes mencioné que las variables y constantes que declaras arriba en la parte superior de la estructura, tienen un nombre diferente. Entonces ahora quiero decirles qué es eso. Esta declaración variable que tengo aquí arriba mensaje. Esto se conoce como una propiedad de la estructura de vista de chat. Si tuviera declaraciones variables adicionales o constantes, esas serían conocidas como propiedades del chat. ¿ También estructura? Y aquí abajo, las funciones en realidad también tienen un nombre diferente. A una función dentro de una estructura se le conoce como método de esa estructura. Por lo que esta función de enviar chat es en realidad un método de la vista de chat. Entonces ahora solo actualicemos aquí nuestros comentarios para que utilicemos la terminología adecuada en lugar de variables y constantes aquí arriba. Voy a renombrar esto, bueno no renombrado, pero solo reescribe mi comentario y llama a esas propiedades. Y en lugar de funciones, estos se van a llamar métodos, sólo para que quede claro. Ahora, dentro de una estructura, las propiedades y los métodos en realidad pueden trabajar juntos para cumplir con los deberes de la vista de chat. Echemos un vistazo a algunas de las formas especiales en que pueden trabajar juntos. Ahora echemos un vistazo a esto enviar un método de chat. Por ejemplo, si tuviéramos que escribir el código aquí para enviar un mensaje de chat, seguro sería útil si pudiéramos acceder al mensaje real en esta propiedad de mensaje, ¿verdad? Bueno, en realidad podemos. Entonces si escribí algo como esto, imprimí y luego dentro de los paréntesis, pongo el nombre de la propiedad. De hecho, puedo acceder a esos datos. Y la razón de esto es porque este inmueble se declara en el alcance de esta estructura. Por lo que el alcance de la estructura es cualquier cosa entre estos dos corchetes rizados, esencialmente los brackets rizados de apertura y cierre de la estructura. Entonces cualquiera de los métodos que declaro aquí, por ejemplo, si declaro otro, llamemos a éste eliminar chat. Porque estos dos métodos también están en el mismo alcance. Ya sabes, está dentro del alcance de la vista de chat. Soy capaz de acceder a la propiedad. Los inmuebles que declaras aquí arriba son evaluables a todo dentro del mismo alcance. Por lo que eso incluye todos los métodos que aquí abajo se declaran. Ahora tengo que decir que cada método tiene su propio alcance local. Por lo que este método de envío de chat tiene un alcance dentro de aquí. Y este método de borrar chat tiene su propio alcance entre estos corchetes rizados. Entonces si declaro una variable dentro de mi método de envío chat, Digamos que el prefijo var es igual a Chris, digamos. Y entonces digamos que uso este prefijo y me antepuse a mi mensaje de chat. Entonces todo el mensaje de chat sería Chris dice, y luego algo. Entonces tal vez imprima prefijo más mensaje para obtener ese tipo de efecto. Y yo quería hacer lo mismo dentro de borrar chat. Si trato de acceder a la variable de prefijo, tipo, imprimir, prefijo más mensaje aquí abajo dentro del método delete chat, verás que eso, Xcode se queja. Nssa no puede encontrar prefijo en el ámbito porque esta variable no se declara en el mismo ámbito. Se declara dentro del alcance de enviar chat. Entonces, ¿cómo arreglaríamos esto? Bueno, una de las formas en que podríamos hacer eso es convertir esta variable de prefijo en una propiedad que declaramos en la parte superior de nuestra estructura. Ya sabes, muévelo fuera del alcance del chat de Sen y ponlo aquí arriba en el alcance de la vista de chat en su lugar. Entonces ahora que estoy declarando mi prefijo como propiedad de la vista de chat, puedes ver que los errores desaparecen. Y puedo acceder a esta propiedad de prefijo dentro. Ambos envían un chat y eliminan los métodos de chat. Ahora quiero hablar de otro tipo de propiedad. En primer lugar, definamos cuáles son estas propiedades aquí arriba. Estas se denominan propiedades almacenadas. Y la razón es que cuando accedes a estas propiedades y las haces referencia por su propio nombre, simplemente te devuelve el valor que está almacenado. Hay otro tipo de propiedad donde al acceder a ella, necesita calcular o calcular el valor antes de que se lo devuelva. Entonces echemos un vistazo a cómo se ve este segundo nuevo tipo de propiedad. Así que permítanme empezar por borrar esta propiedad de prefijo aquí arriba y eliminar eso. Y luego voy a declarar este nuevo tipo de bienes. Empieza igual que una normal. Utilice el espacio VAR y luego el nombre de la propiedad computada. Voy a llamarlo mensaje con prefijo, seguido del nombre. En lugar de asignarle algunos datos, se abre un conjunto de corchetes rizados. Y aquí puedes poner el código computacional para calcular el valor que devolverás cuando se llame a esta propiedad. Sin embargo, una cosa, porque el valor no se conoce de inmediato, Xcode no puede inferir cuál es el tipo de datos. Por lo que realmente tiene que especificar el tipo de datos después del nombre de la propiedad calculada. Entonces después de mensaje con prefijo, voy a poner colon y voy a poner string porque ese es el tipo de valor que esta propiedad va a devolver. Esto es diferente de esta propiedad almacenada aquí arriba mensaje donde realmente puedo usar la taquigrafía y borrar el tipo de datos. Por lo que es solo mensaje var es igual a cadena. Y puedo hacer esto porque de inmediato estoy asignando un valor a esa propiedad. Por lo que xcode puede mirar ese valor y puede determinar e inferir cuál debe ser el tipo de datos para esa propiedad. Con una propiedad calculada, tengo que especificar explícitamente el tipo de datos. De acuerdo, así que para mi mensaje de propiedad computada con prefijo, Echemos un vistazo al código dentro de los corchetes rizados. Aquí, voy a usar la palabra clave return, igual que con funciones, ¿no? Voy a regresar. Chris dice, así que esto es un mensaje string plus. Entonces ahora en mi método de envío chat, en lugar de imprimir prefijo más mensaje, solo puedo devolver mensaje con prefijo. Lo mismo para borrar chat. En lugar de prefijo más mensaje, voy a devolver mensaje con prefijo. Por lo que cada vez que se accede a esta propiedad, va a ejecutar el código dentro estos corchetes rizados y devolver eso como el valor para esa propiedad y necesita calcularla. Por eso se llama propiedad computada. Ahora con propiedades de computadora, También hay un atajo. Si solo hay una línea de código aquí, entonces no necesito la palabra clave return porque Xcode puede suponer que esta sola línea de código generará los datos que quiero devolver para mi computadora propiedad. Por lo que en realidad puedo simplemente eliminar la palabra clave return. No obstante, si tengo múltiples líneas de código, entonces definitivamente necesitaría esa palabra clave return porque Xcode no sabe qué línea de código se supone que sea el valor que se devuelve. Entonces, por ejemplo, dentro de mi propiedad de computadora, si digo dejar que el prefijo sea igual, dice Chris, y luego aquí abajo tengo prefijo más mensaje. No va a saber qué declaración de código devuelve el valor. Entonces en realidad tengo que usar la palabra clave return así. Y eso va a estar bien. Ahora en lo que respecta a las propiedades computadas, definitivamente hay más de lo que podemos hablar, pero esto será suficiente por ahora. En capítulos posteriores de este curso. Definitivamente volveremos a repasar las propiedades computadas. Muy bien, hagamos un breve recapitulación antes de terminar esta lección, aprendiste a declarar una estructura básica. Aprendiste sobre las propiedades y los métodos en la estructura, aprendiste sobre el alcance y también aprenderás sobre las propiedades computadas. Ahora sé que la parte difícil es envolver la cabeza en torno a estos conceptos. A medida que codificamos más juntos, van a ver que estos conceptos se ponen en práctica. Yo sólo quiero decir una cosa antes de que terminemos. Tú lo hiciste. Si eres completamente nuevo en codificar estas tres lecciones donde las mente-flexión. En la siguiente lección, te voy a mostrar cómo estos conceptos se relacionan con tu proyecto real de Xcode. Está bien, nos vemos ahí. 10. 09: instancias de programación Swift: Hola y bienvenidos. Por lo que has aprendido que mucho de Swift en las últimas lecciones, empezaste con variables y constantes y tipos de datos. Después aprendiste sobre las funciones. Y luego aprendes sobre estructuras que puedes agrupar todas esas cosas juntas para representar o modelar algo en tu app. Ahora esta lección va a ser la pieza final del rompecabezas. No decir que vas a ser un maestro veloz ni nada. Pero al final de esta lección, verás cómo todos los conceptos y el código encajan y funcionan juntos dentro de una aplicación rápida de interfaz de usuario. Está bien, con eso dicho, vamos a sumergirnos en la derecha. Está bien, así que empecemos con un patio de recreo vacío. ¿ Recuerdas entonces cuando aprendiste sobre funciones y te enseñé a declarar una función usando la palabra clave func seguida del nombre de la función. Digamos que mi función seguida de un conjunto de paréntesis y luego un conjunto de corchetes rizados. Y dentro de los corchetes rizados, tendríamos el código para la función. Pero esto es solo una declaración de función que no se ejecuta ningún código, no pasa nada. No es hasta que llamamos a la función que el código dentro de esa función se ejecuta ¿verdad? Entonces llamaría a la función diciendo mi función, y luego los paréntesis. Si ejecuto mi patio de recreo en este momento puedes ver que sale Hola en la consola. Entonces las estructuras son así también. Cuando declaramos una estructura usando la palabra clave struct seguida del nombre de la estructura. Entonces digamos mi estructura, seguida de un conjunto de corchetes rizados. Y luego ponemos el código dentro de esta estructura. Déjame mover mi función aquí, y vamos a declarar una propiedad aquí arriba, var mensaje es igual hola. Y luego imprimamos mi mensaje de propiedad dentro de mi función. Esto es sólo una declaración de una estructura. En realidad no hace nada. Piénsalo como un plano para un edificio. Para que podamos usar esta estructura, necesitamos darle vida. Tenemos que crear lo que se llama instancia de la estructura. puede pensar en ello como convertir este plano para construir en un edificio real. Entonces, ¿cómo vamos a crear una instancia de esta estructura? Bueno, eso es fácil. Simplemente escribe el nombre de la estructura seguido de un par de paréntesis como ese. Ahora por si acaso todavía estás borroso sobre el concepto de crear una instancia de una estructura. Déjame darte un par de analogías diferentes para ayudarte a tratar de entender este concepto. A algunas personas les resulta más fácil cuando digo que declarar una estructura o la declaración de esta estructura es algo así como un plano para un automóvil o un plan de arquitectura para una casa. Usando ese plano o usando ese plan de arquitectura, puedo crear autos y puedo crear casas, y esos son los objetos reales. En tanto que el plano o el plan de arquitectura es más bien como una plantilla. Simplemente describe cómo va a funcionar esa cosa una vez que lo des a la vida. Entonces eso es lo que está pasando aquí mismo. Se trata de una declaración de una estructura. Describe todas sus propiedades y funciones. Ya sabes, las cosas que puede hacer. Y entonces es sólo hasta que lo demos a la vida creando una instancia de la misma que realmente podemos usarla. Entonces ahora que hemos creado una instancia de la misma, vamos a explorar qué podemos hacer con ella. Ahora, en primer lugar, tenemos que hacer un seguimiento de esta instancia porque se considera una pieza de datos, necesitamos hacer un seguimiento de la misma y tener una forma de referenciarla. Entonces vamos a crear una variable llamada sólo voy a llamarla a por el bien de la simplicidad. Y voy a asignar esa nueva instancia a mi variable a. Hey, espera un minuto. Si esta instancia es una pieza de datos, entonces ¿cuál es el tipo de datos de esta pieza de datos? ¿ Y qué tipo de datos tiene esta variable? Bueno, el tipo de datos es el nombre de tu estructura. Eso es correcto. Por lo que realmente puedo cambiar mi declaración variable de var a, var un colon, mi estructura. Sí, su estructura es su propio tipo de datos. Entonces esta instancia que has creado, el tipo de datos de eso es mi estructura. Ahora esta pequeña instancia tiene superpoderes porque lo hemos diseñado de esa manera. Puede contener datos en su propiedad de mensaje, y puede generar ese mensaje usando el método myfunction. Entonces, ¿cómo podemos ir para acceder a esas cosas de esta instancia? Bueno, ahí es donde entra la notación de puntos. Echemos un vistazo a qué es la notación de puntos. Entonces hagamos referencia a la variable a, seguida de un punto o un punto. Y como puedes ver en el menú autocompletar, puedes elegir mensaje que está accediendo a la propiedad, o puedes seleccionar mi función, que va a ejecutar el código en ese método. Por lo que usando la notación de puntos, se puede acceder a las propiedades y los métodos de esa instancia. Vamos a probar esto. Entonces, en primer lugar, voy a asignar algo a la propiedad de esta instancia. Voy a asignar, digamos hola. Y luego voy a imprimir. A.me, sólo para mostrarles que efectivamente puedo acceder a esta propiedad y puedo imprimirla. Siguiente. En lugar de usar esta declaración de impresión aquí, simplemente voy a llamar al método de esa instancia. Voy a llamar a mi función. Y voy a volver a ejecutar este código. Y todavía nos drogamos porque el código dentro de este método en realidad simplemente imprime la propiedad. Ahora estas pequeñas instancias bastante el héroe de acción ¿no? Puede hacer todas las cosas para las que lo diseñamos. Ahora bien, debido a que esta declaración de estructura es como un plano o un plan de arquitectura, eso significa que podemos crearla tantas instancias como queramos. Entonces sigamos adelante y creemos una segunda instancia. Esta vez voy a declarar otra variable, var ser para almacenar otra instancia de mi estructura. Ahora lo importante a tener en cuenta es que se trata de instancias completamente independientes. Volviendo a la analogía del plano del automóvil, es como si la fábrica de automóviles hiciera dos autos del mismo plano. Esos dos autos son tratados como dos autos diferentes. Lo mismo aquí. Acabo de crear dos instancias de mi estructura. Por ejemplo, si asigno un mensaje para ser alto, entonces imprimo el cordón en el mensaje, o me permito asignar otra cosa para ser.message y lo imprimo. Verás que para un punto myfunction llamando a ese método , imprime alto. Y cuando imprimo b.me, sale mundo a la consola. Por lo que puede ver que cada instancia realiza un seguimiento de sus propios valores dentro de la propiedad de mensaje. Ahora ya sabes que necesitas crear una instancia de una estructura para poder utilizarla. Echemos un vistazo a cómo las instancias de estructuras pueden trabajar juntas. Ahora para usar un ejemplo anterior de la lección anterior, supongamos que tengo una vista de chat en mi aplicación, así que he declarado una estructura para representar esta vista. Agrupa todas las propiedades, el código de vista y los métodos relacionados con mi vista de chat. Y supongamos que tenía otra estructura para agrupar todo el código de red o el código de base de datos para guardar los datos. Declaremos algo así aquí. Entonces struct, Llamemos a esto la red, o llamémoslo el gestor de bases de datos. ¿ De acuerdo? Y supongamos que aquí tenía un método. Entonces func, llamemos a esto guardar datos. Y el parámetro de entrada para esto son los datos que queremos guardar. Entonces digamos que declaro un solo parámetro llamado data y lo convierto en un tipo de cadena, y devuelve un valor, va a devolver un valor booleano, verdadero o falso, indicando si esto fue exitoso o no. Verdadero para un exitoso, falso para infructuoso. Y en la vida real, no sería factible devolver realmente un resultado al instante como este, porque dependiendo las condiciones de la red y otros factores, no se quiere esperar alrededor de los datos a guardar. Por lo que no quieres que se detenga la ejecución. Pero por el bien de la simplicidad, digamos que podemos devolver el resultado de inmediato. Entonces cuando escuchas esto, este código guarda los datos y devuelve un resultado booleano. Entonces en este ejemplo, sólo voy a volver verdadero. Entonces solo voy a convertir un valor codificado porque no voy a implementar este método. Lo principal que quiero mostrarte es cómo la vista de chat va a usar el gestor de base de datos para guardar el mensaje. Por lo que de vuelta en la vista de chat, en este enviar un método de chat, por ejemplo, podría crear una instancia del gestor de base de datos. Entonces digamos que var d b es igual a gestor de base de datos, seguido de un conjunto de paréntesis. Y así, he creado una nueva instancia de ese gestor de base de datos. Y ahora si quisiera guardar mi mensaje, llamaría es método de datos guardados. Por lo que db dot guardó datos y pasaría en mi propiedad de mensaje como los datos de entrada. Voy a seguir adelante y pasar un mensaje. Pero recuerda, cuando llamo a este método de datos guardados, devuelve valor booleano para que yo indique si ese guardado fue exitoso o no. Por lo que puedo asignar la salida de ese método a una constante. Voy a llamar que esto fue éxito, ¿verdad? Por lo que voy a asignar esa salida booleana a una nueva constante llamada fue éxito. O tal vez simplemente lo llamaré exitoso. Y luego aquí abajo, puedo escribir algún código. Consulta el valor booleano exitoso. Si no tiene éxito. Mostrar alerta al usuario. Ahora en futuras lecciones vas a aprender a escribir estas declaraciones en base a las condiciones. Pero por ahora, este comentario tendrá que ver. El principal comida para llevar. Para este ejemplo que te estoy mostrando es el hecho de que dentro del método enviar un chat de la estructura de vista de chat, está usando otros métodos de estructuras creando una instancia de la misma. Entonces así es como las instancias de estructuras pueden trabajar juntas para hacer que tu aplicación funcione. Y esto es esencialmente todo lo que tu aplicación es. Se trata de diferentes instancias de estructuras trabajando juntas para producir las vistas, para manejar la entrada del usuario y para ejecutar la lógica. Ahora quiero hablar de niveles de acceso por un segundo. Supongamos, por ejemplo, en mi gestor de base de datos, tenía algún tipo de información que estaba rastreando como una propiedad que solo necesitaba el gestor de base de datos. No sería relevante para ninguna otra estructura. A lo mejor es un nombre de servidor o algo así. Entonces déjame simplemente escribir una nueva propiedad en mi gestor de base de datos llamada nombre del servidor. Y le asignaré una cadena llamada servidor uno. Ahora esta propiedad no sería interesante para ninguna otra estructura, pero como puedes ver en el método send chat, he declarado esta instancia del gestor de base de datos. Si escribo db dot usando notación de puntos, puedo acceder a esa propiedad del nombre del servidor. Y a veces quizá no quieras exponer estas cosas. Entonces lo que puedes hacer es especificar un nivel de acceso frente a esa propiedad. Entonces delante del nombre del servidor var, esa propiedad, puedo poner la palabra clave privada, Así que ahora se convierte en privado var nombre del servidor. Y al hacer esto, mantiene esa propiedad accesible sólo dentro del alcance del gestor de base de datos. Entonces como pueden ver, todavía puedo acceder al nombre del servidor dentro del método de datos guardados. De acuerdo, está en el mismo alcance, pero en el método de chat del centro de la vista de chat aquí abajo. Si vuelvo a utilizar la notación de puntos, por mi instancia, se puede ver que no puedo acceder a ese objetivo de propiedad o no puedo verlo. Y además, en realidad se puede hacer lo mismo con las funciones. Por lo que puedo poner privado frente a la palabra clave func. Y ahora se puede ver que Xcode se queja. No puedo ejecutar este método desde el método de chat del sol de la vista de chat. Ahora es una buena práctica estar al tanto de qué propiedades y métodos necesitan ser accesibles a otras instancias y otras estructuras y marcar todo lo demás es privado. Hacer esto es una forma proactiva de evitar que surjan comportamientos inesperados y errores. Muy bien, y ahora para la pieza final de la lección, quiero relacionar todo lo que has aprendido hasta ahora con una rápida aplicación de interfaz de usuario dentro de XCode. Entonces sigamos adelante y hagamos eso. Muy bien, así que ahora sigamos adelante y empecemos un nuevo proyecto de app para iOS. Solo voy a nombrar este proyecto de prueba y asegurarme que las interfaces Swift UI y ciclo de vida sean lenguajes de aplicación de UI rápidos Swift, y estamos bien para ir. Entonces solo voy a guardar esto en el escritorio y primero vamos a saltar a la vista de contenido dot swift. Ahora, sólo voy a cambiar esto a iPhone 12 y voy a golpear currículum. Pero la parte importante es lo principal que quería mostrarte realmente es el código, ¿no? Echa un vistazo a esta estructura. Sabes que eso significa que la vista de contenido es una estructura. Hay algunas palabras clave y bits de código que vamos a pasar por alto por ahora porque aún no hemos aprendido eso y ahora no es el momento adecuado para repasarlo. Entonces voy a pasar por alto un par de cosas por realmente quiero señalar que conceptos que has aprendido hasta ahora y mostrarte dónde encajan. Entonces esta es una declaración de estructura. Déjame colapsar este código por un segundo. Ahí vas. Por lo que se puede ver que se trata de una estructura. La vista de contenido es el nombre de la estructura seguido de la vista de dos puntos. Y vamos a llegar a esto en tan solo un segundo. Y luego se pueden ver los corchetes rizados que contienen todo el código para esa estructura. Está bien, entonces vamos a expandirlo de nuevo. Y echemos un vistazo a qué más hemos conseguido. Aquí abajo. Tenemos la palabra clave var. Entonces ese es el inicio de una propiedad. El nombre de esta propiedad es cuerpo. De acuerdo, Entonces después de eso tenemos colon y luego tenemos algo de vista. Y vamos a llegar a esto de nuevo en tan solo un segundo. Pero se puede ver que aquí hay un conjunto de corchetes rizados. Entonces eso te dice que esta es una propiedad computada. Entonces déjame colapsar el código otra vez. Y se puede ver que efectivamente esto parece un tipo de datatype de cuerpo var propiedad computada, y luego un conjunto de corchetes rizados dentro es el código que se calcula o calcula para devolver el valor cuando se accede a esta propiedad. Entonces, ¿puedes ver todos estos conceptos que aprendimos en las últimas cuatro lecciones? ¿ Están regresando? Ahora quiero hablar de esta vista y alguna vista. Entonces hablemos de esta visión de colon en la declaración de la estructura primero. A juzgar por cómo has usado el colon antes, podrías pensar que este es el tipo de datos para la estructura, pero no del todo. Eso realmente no tiene sentido, ¿verdad? Porque recuerde, el nombre de la estructura en sí es el tipo de datos para instancias de esa estructura. Entonces, ¿qué es esta vista de colon después del nombre de la estructura? Bueno, cuando estás declarando una estructura, los dos puntos después del nombre de la estructura indican que esta estructura sigue un protocolo. En este caso, sigue el protocolo de vista. Entonces, ¿en qué piensas cuando escuchas la palabra protocolo? Bueno, para mí, lo pienso como un conjunto de reglas o un conjunto de acciones. Por ejemplo, algo así como el protocolo de emergencia de incendios que podría tener un edificio para qué hacer cuando ocurre un incendio. O como el código de construcción que un desarrollador tiene que seguir para construir una casa que sea segura. De igual manera en Swift, un protocolo es una especificación o un conjunto de reglas que la estructura tiene que seguir. Esta parte de vista de dos puntos indica que esta vista de contenido sigue el protocolo de vista. Terminología informal Swift. vista de contenido se ajusta al protocolo de vista. Ahora una cosa importante a mencionar es que escribir colon seguido del protocolo es decir y declarar que se ajusta al protocolo. Pero lo haces en realidad, es un poco como levantar la mano al declarar algo. Pero, ¿en realidad sigues las reglas de ese protocolo? Y así el código dentro de esta estructura en realidad tiene que satisfacer las especificaciones para ese protocolo. En este caso, para que el protocolo de vista se ajuste a él, tenemos que tener una propiedad de cuerpo que devuelva alguna vista. Como puede ver aquí, nuestra estructura de vista de contenido efectivamente satisface esa regla. Entonces por eso se ajusta al protocolo de vista. Entonces ahora que entiendes cuáles son los protocolos, puedes ver que el tipo de datos para esta propiedad del cuerpo es en realidad cualquier valor que se ajuste al protocolo de vista. Sí, en este caso, el tipo de datos para esta propiedad no es en realidad tipo de datos, pero en realidad es cualquier tipo de datos que se ajuste a un protocolo determinado, en este caso, el protocolo de vista. Por lo que dentro de este código para esta propiedad computada, necesita devolver alguna instancia que se ajuste al protocolo de vista. Abramos este código y veamos qué tenemos. Entonces lo que tenemos aquí, bueno, tenemos una sola declaración de código. Y recuerda lo que dije sobre las propiedades computarizadas. Si es solo una sola declaración de código, entonces puedes omitir la palabra clave return, pero voy a especificarla explícitamente para que quede claro para ti. Entonces, ¿qué está pasando aquí? Parece que estamos creando una instancia de una estructura de texto. Ahora una forma de averiguarlo es si entras al panel de utilidades o al panel de inspector y entras a la pestaña de ayuda rápida aquí mismo. Y solo pones tu cursor sobre lo que quieres mirar. Por lo que voy a dar clic en este texto. Entonces como se puede ver aquí, efecto, el texto es una estructura. Por lo que estamos creando una instancia de la estructura del texto. No obstante, notarás que crear esta instancia es diferente a cómo lo hicimos antes porque usamos un conjunto vacío de paréntesis. Estoy aquí cuando estamos creando una instancia de esta estructura de texto, estamos pasando algunos datos de entrada. Entonces sí, en realidad puedes pasar los datos de entrada como parámetro a la creación de una instancia de una estructura. Estos se llaman inicializadores. Ahora aún no hemos hablado de eso y lo haremos en próximas lecciones. Pero por ahora, solo entiende que hay una manera de que pases los datos de entrada a la creación de una instancia de una estructura. Entonces eso es exactamente lo que está pasando aquí mismo. Ahora podría estar preguntándose, ¿esta estructura de texto se ajustó al protocolo de vista? Bueno, debe escribir porque acuerdo a esta propiedad corporal, lo que sea que se devuelva para esta propiedad computada tiene que ajustarse a esto. Entonces de nuevo, sumémonos en la ayuda rápida. Entonces voy a flotar sobre los textos. Voy a bajar. Y de hecho, voy a abrir la documentación del desarrollador. Ahora si estás usando Xcode 1.112, hubo un error que se estrelló al intentar abrir esta ventana. Por lo que solo tienes que actualizar Xcode de esto se bloquea por ti. De acuerdo, Entonces esta es la documentación para los textos. Se puede ver que se trata de una estructura. Y si te desplazas todo el camino hacia abajo, voy a saltarte todas estas cosas porque solo quiero mostrarte que se ajusta a dos protocolos en realidad. Pero lo que nos interesa es que sí se ajusta al protocolo. Está bien, Otra cosa que quiero señalar es que esto, recuerda esto desde temprano. Este es un modificador. Y ahora a ti, debe parecer bastante familiar, ¿verdad? Porque parece que estamos llamando a un método. Esta es la notación de puntos justo aquí. Estamos creando una instancia de la estructura del texto. Y luego estamos llamando al método de relleno en esa instancia. A ver si lo pongo en la misma línea. Podría parecer un poco más familiar para ti. De acuerdo, así que espero que los puntos estén empezando a conectar. No se pretende juego de palabras. De acuerdo, entonces para relacionar esto de nuevo la lección de estructuras anteriores donde te mostré cómo declarar una estructura. Teníamos un par de secciones diferentes, ¿verdad? Por lo que en la parte superior aquí declararíamos nuestras propiedades. Y de hecho, esta propiedad corporal se considera un derecho patrimonial. Pero también contiene nuestro código de vista. Por lo que aquí sería donde va nuestro código de visión. Y luego aquí abajo declararíamos los métodos para esta estructura. De acuerdo, entonces creo que entiendes que esta estructura llamada vista de contenido representa la vista principal o la pantalla principal de esta app. Pero no dijimos que las estructuras por sí mismas no hacen nada realmente. Es necesario crear una instancia de la misma para que funcione. Bueno, ¿dónde estamos creando una instancia de vista de contenido? Para eso, necesitamos perforar de nuevo hasta el punto de entrada de la app, que es este de aquí. Por lo que puedes ver esto por sí mismo también es una estructura y el nombre de esta estructura es el nombre de tu proyecto y se ajusta a un protocolo llamado app. Entonces veamos la ayuda rápida y veamos qué se trata este protocolo. Crear una aplicación mediante la declaración de una estructura que se ajuste al protocolo de la aplicación, implementar la propiedad computada del cuerpo requerido para definir el contenido de la aplicación. Ahora tenemos otra propiedad computada de cuerpo. Voy a saltarme algo de esta escena en cosas del grupo Window. Quiero señalar que aquí es donde estamos creando una instancia, esa estructura de vista de contenido. Entonces, ¿ves cómo encaja todo? Además, volvamos a la vista de contenido y déjame mostrarte algo más. Entonces para esto, voy a volver a abrir el lienzo. Y voy a retomar la vista previa. Mira esta estructura aquí abajo. Esto es lo que está impulsando la vista previa que se ve aquí. Esta estructura no se utiliza realmente como parte de tu app. Es sólo para previsualizar en el Canvas aquí mismo. Por lo que se ajusta al protocolo de proveedor de vista previa. Y tiene una propiedad llamada previsualizaciones, palabra clave estática ignorar. Por ahora, vamos a explicar eso en una futura lección. Y aquí abajo, puedes ver que se está creando una instancia de tu estructura de vista de contenido y eso es realmente lo que se muestra aquí. De hecho, puedo aplicar modificadores a esta instancia y va a cambiar lo que tenemos aquí. De acuerdo, así que puedo usar la notación de puntos para llamar a modificadores, que ahora, ya sabes, son solo métodos, ¿verdad? De esa opinión o de esa instancia. En realidad. En lugar de hacer eso, ¿por qué no usamos la forma visual y vemos cómo cambia el código. Por lo que 10, previsuo este cambio. En realidad voy a cambiar el esquema a modo oscuro. Por lo que puedes ver que agrega un modificador a esa instancia. También cambiemos el dispositivo a iPod touch. puede ver que agrega otro modificador llamado dispositivo de vista previa. Ahora bien, ¿qué pasa si creo otra vista previa? Porque puedes hacer clic en este botón aquí mismo, y va a crear otra vista previa aquí abajo. Se puede ver qué pasa con el código. Bueno, creó otra instancia de vista de contenido y tiene sus propios modificadores. Ahora esto se agrupa por un contenedor, un contenedor llamado grupo, que realmente no hemos cubierto aún, pero en el futuro solo sabremos que agrupa vistas. Entonces esta instancia de vista de contenido es para esta de aquí arriba, y esta instancia es ésta de aquí abajo. Ver Puedo cambiar este esquema a luz. Y se puede ver que cambia eso aquí. Y puedo cambiar este dispositivo a iPhone 12. Y los cambios que modificador ahí. Por lo que son instancias independientes. Yo era mucho para aceptar y por eso nunca te recomiendo que memorices nada. Cuanto más práctica obtienes, pronto se convertirá en segunda naturaleza para ti. Hagamos una recapitulación rápida, ¿sí? Aprendiste a crear instancias de tu estructura. Aprendiste a usar la notación de puntos para acceder a los métodos y las propiedades de tus instancias. Y también aprendiste sobre los niveles de acceso. De modo que se puede controlar qué propiedades y qué métodos se puede acceder con la notación de puntos. Por último, viste cómo todos estos conceptos se relacionan de nuevo con una aplicación de interfaz de usuario rápida en Xcode. Ahora en las siguientes lecciones, vamos a volver a nuestro juego de cartas de guerra y tomar todo este nuevo conocimiento rápido encontrado y dar vida a ese juego de cartas de guerra. En la siguiente lección, te mostraré cómo usar el elemento botón para manejar la interacción del usuario. Está bien, nos vemos ahí. 11. 10: botones de SwiftUI: Hola y bienvenidos. En las lecciones anteriores, aprendiste los conceptos básicos de la programación Swift. Y te mostré cómo esos conceptos se aplicaban a tu proyecto Xcode. Ahora, volvamos a Swift UI y vistas. Específicamente hoy quiero hablar de la vista de botones. Vamos a sumergirnos justo en. Está bien, entonces tengo un nuevo Swift ¿proyecto aquí? Pensé que echaríamos un vistazo a crear algunas instancias de botón en un proyecto fresco juntos antes de volver al juego duro de trabajo para usar allí la instancia de botón. Entonces sigamos adelante y eliminemos esta vista de texto aquí mismo. En crear algunas instancias, un botón es una estructura igual que lo era ese texto. Y necesitamos crear una instancia de botón. En otras palabras, necesitamos instanciar un botón y es sólo otra forma de decirlo. Entonces sigamos adelante y tecleemos botón, seguido de abrir un corchete redondeado a la izquierda. Y eso va a sacar a la luz nuestro menú de autocompletar. Hay un par de métodos de inicializador diferentes que podemos usar para crear una instancia de botón. Y estos métodos inicializadores, recuerden, son solo formas diferentes de crear una instancia mientras pasan algunos datos. Dos de los más comunes que vas a estar usando es éste de aquí, donde pasas en una cuerda. Y este protocolo de cadena de tipo de datos solo significa cualquier cosa que se ajuste a ese protocolo de cadena y una pieza de texto lo hace. Este te permitirá simplemente pasar en un trozo de texto para usar como etiqueta de botón. Y también te permitirá pasar un bloque de código para que se ejecute cuando se toque ese botón. Entonces echemos un vistazo a estos parámetros con más detalle. Por lo que este primer parámetro para la etiqueta del botón es bastante sencillo. Aquí solo pasas en un trozo de texto. Voy a llamar a este botón, Click Me. Y si actualizamos, nuestra vista previa hará cualquier cosa aún antes de especificar el segundo parámetro. El tipo de datos para este parámetro de acción es algo que aún no has visto. Pero se parece a una firma de función sin el nombre de la función, ¿verdad? A esto se le llama cierre. Y en pocas palabras, se puede pensar en ello como un bloque de código o como una función sin el nombre de la función, se pasa en un bloque de código como parámetro. Cuando se toca el botón, se va a ejecutar ese bloque de código. Nuevamente, a esto se le llama cierre. Entonces echemos un vistazo a cómo podemos especificar el cierre como parámetro. Ahora una de las cosas más fáciles que puedes hacer es resaltar este parámetro y simplemente pulsar Enter. Y Xcode va a abrir automáticamente un cierre para que escribas tu bloque de código en. Pero no voy a hacer eso ahora mismo porque quiero pasar por los pasos y realmente te lo descompongo y mostrarte exactamente lo que estás especificando. Y luego al final, te mostraré lo que pasa cuando sí pegues Enter y solo deja que Xcode abra el cierre por ti. Especifiquemos ese cierre manualmente por ahora. Muy bien, entonces el tipo de cierre que esto espera es el tipo más simple que se puede ver. No acepta parámetros. Estos dos corchetes aquí mismo, estos dos corchetes redondeados. Esa es una lista de parámetros, igual que tendrías cuando estás declarando una función. Pero está vacío, así que no hay parámetros. Y luego a continuación se ve un guión seguido de un símbolo mayor que. Y sabes que eso significa tipo de retorno, ¿verdad? Y regresa vacío. Vacío no significa nada. Por lo que no devuelve nada y no acepta nada. Es muy simplemente un bloque de código. Muy bien, entonces ahora que ya sabes el tipo de función entonces está esperando, Vamos a seguir y especificarlo. Entonces voy a borrar eso. Y voy a abrir un par de corchetes rizados. Y no necesito devolver nada. No necesito especificar ningún parámetro. Es muy sencillamente sólo el bloque de código. Por lo que se puede especificar eso con sólo un conjunto de corchetes rizados. Y entre esos corchetes rizados, pones cualquier declaración de código que quieras. Entonces solo voy a imprimir hola mundo. Y ese es tu botón completado. Dirijamos este proyecto y veamos qué pasa. De acuerdo, Así que hemos estado en el medio que dice click conmigo. Cuando lo toco, corre el cierre. Se ejecuta el código en el cierre. Y se puede ver que dentro, allá abajo en la consola, sí imprime hola mundo cada vez que hago clic en este botón. De acuerdo, ahora volvamos a nuestro proyecto Xcode porque esa es solo una forma de instanciar un botón. Voy a agregar un comentario aquí y llamar a esta instancia de botón con cierre. ¿De acuerdo? Y entonces también voy a poner esto dentro de una pila V. En realidad, te voy a mostrar una taquigrafía, forma genial de hacerlo. Voy a meterlo dentro de la pila porque quería mostrarte un par de otras formas de crear botones. Entonces vamos a crear un par de botones juntos. Adelante y comando haga clic en este botón y simplemente puede elegir Embebido y v stack. Haz eso. Pone el elemento en la pila para ti, aunque, no pudo mover mi comentario ahí. Entonces pongamos eso justo ahí. Está bien. Entonces tenemos un botón y quiero mostrarles el mismo botón, pero con una mano corta, Hay algo llamado el cierre trailing. Déjame mostrarte lo que eso significa. Entonces instancia de botón con cierre final, voy a copiar y pegar el botón que acabamos de declarar y crear otra copia del mismo. Entonces si en la lista de parámetros, el último parámetro espera un cierre, hay una taquigrafía. Y cómo funciona es que sacas ese último parámetro de la lista de parámetros y simplemente pones el cierre después de la llamada al método. Déjame mostrarte a lo que me refiero. Entonces en esta lista de parámetros, ese cierre es ese último parámetro, ¿verdad? Por lo que este es un candidato primo para un atajo de cierre de trailing. Yo tomo el propio cierre. Entonces voy a cortar esto de la lista de parámetros. Y simplemente voy a agregar un espacio después del soporte redondeado final y luego simplemente pegar el cierre así. Y entonces puedo seguir adelante y quitar la etiqueta perimetral o la etiqueta de argumento de esa lista de parámetros así. Y estas declaraciones de dos botones son exactamente lo mismo. Es sólo que están escritos de manera diferente. Uno está especificando el cierre dentro de la lista de parámetros y el otro lo está especificando usando un cierre final final. Y es por eso que quería mostrarte esto manualmente en lugar de solo dejar que Xcode te abra un cierre. Porque cuando dejas que Xcode lo haga, va a reconocer que esos parámetros de cierre, el último, y lo va a convertir en un cierre final para ti. Yo soy automáticamente así que déjame mostrarte eso. Si declaro otro botón, usemos el mismo. Haga clic en mí, y luego toque ese parámetro de acción, o haga doble clic en él o golpeo Enter y dejo que Xcode abra el cierre. Automáticamente lo cambia en un cierre final. Entonces pensé que eso sería realmente confuso para ti si nunca hubieras visto eso antes. Y así por lo menos ahora sabes lo que es un cierre de trailing y por qué, ya sabes, Xcode hace esto por ti. De acuerdo, entonces eso es solo crear un tipo de botón. Ambas formas de crear botones donde solo tienes una pieza de texto como etiqueta. Pero y si quisieras que tu botón fuera una imagen o un icono o algo así, no sólo una simple pieza de texto. Bueno, hay otro método inicializador para el botón que podemos usar para eso. Entonces echemos un vistazo a esa instancia de botón con vista de etiqueta. Entonces sigamos adelante y tecleemos botón, abran un corchete. Y ahora echemos un vistazo a este otro método inicializador con un parámetro de acción y etiqueta, crea un botón que muestra una etiqueta personalizada. Y se puede ver de la lista de depredadores que el primero me dejó, déjame volver a ese menú de autocompletar. Echando un vistazo a esta lista de parámetros ahora se puede ver que este parámetro de cierre de acción es el primer parámetro, y luego el segundo parámetro es una etiqueta. Ahora para este parámetro de etiqueta, puedes devolver cualquier vista que quieras representar tu botón. Entonces sigamos adelante y elijamos este método de inicialización. Se puede ver para el cierre de acción aquí mismo, si hago doble clic en él, no se va a convertir en un cierre de trailing. Y la razón de eso es porque no es el último parámetro en la lista de parámetros. Por lo que eso no califica para convertirse en un cierre de trailing. De acuerdo, Entonces cuando se toque de nuevo este botón, solo voy a imprimir Hello World en la consola. Pero para la etiqueta, notarás que tengo cierta libertad para especificar qué tipo de vista quiero devolver. Entonces aquí solo está devolviendo un TextView con una simple pieza de texto aquí llamada botón. Pero puedo, puedo devolver una imagen B, por ejemplo, podría devolver una pila de vistas diferentes. Puedes devolver lo que quieras. Permítanme retomar aquí la vista previa para que puedan ver los diferentes botones que hemos declarado. ¿ De acuerdo? Entonces lo que voy a regresar aquí es tal vez menos retorno en cada pila. Y voy a devolver un texto que dice Editar. Y también voy a devolver una imagen frente a eso. Y para esta imagen, voy a especificar, no he agregado ninguna imagen a nuestra biblioteca de activos, pero voy a usar algo llamado símbolo SF. Ahora aún no hemos pasado por los símbolos SF. Lo haremos en una lección futura. No obstante, los símbolos SF son geniales. Porque básicamente son un conjunto de iconos que viene con Xcode que solo puedes usar en tus aplicaciones. Y estas son características muy especiales de estos símbolos SF que pasaremos en una futura lección en este curso, hay una app mac gratuita llamada símbolos SF que puedes descargar donde puede navegar por todos los diferentes símbolos que están disponibles para usted de forma gratuita. Entonces por ejemplo, solo voy a usar este lápiz uno. Cada uno de estos tiene un nombre que simplemente puedes especificar y podrás utilizarlo. Por lo que para la imagen, el inicializador a usar, si desea usar S de símbolos, se llama nombre del sistema. Y luego especificas el nombre que viste debajo del icono. Lápiz. Yo sólo voy a poner lápiz ahí mismo y se puede ver que aparece el icono. Muy bien, Así que ahora ejecutemos esta aplicación en el simulador y echemos un vistazo a lo que sucede. De acuerdo, así puedo tocar este, dice Hola Mundial, ese dice Hola mundo, ese dice Hola mundo. Enseñó este también dice helloworld. Esos son los cierres que especifiqué para todos los botones. Muy bien, Ahora ya sabes especificar un botón sencillo con solo el texto para su etiqueta. Ya sabes especificar un botón el cual puedes usar cualquier vista como botón. Ahora vamos a volver a nuestro juego de cartas de guerra y convertir esa imagen de botón de trato en un botón real. De acuerdo, entonces ahora tengo el juego de cartas de guerra en el que estábamos trabajando todo el camino de regreso, fue menos de cuatro o cinco? Pero aquí es donde llegamos. Y si recuerdas, habíamos usado una imagen para este botón de trato. Y este es el código de vista para eso. Y se puede ver que es sólo una imagen. Ahora, ya sabes cómo convertir esto en un botón. Entonces quiero que solo pausas el video ahora mismo y lo pruebes por tu cuenta, en tu propio proyecto justo como un poco de ejercicio. Después de que lo hayas probado por ti mismo. O si te quedas atascado, sigue reproduciendo este video y lo haremos juntos. Está bien, probémoslo juntos. Entonces voy a crear un poco de espacio aquí. Y vamos a declarar un botón. Usando botón. Vamos a abrir corchetes, y vamos a elegir este método de inicializador de etiquetas de acción. Ahora, dentro de la acción, sólo vamos a abrir ese bloque de código, pero realmente no vamos a hacer nada todavía. Eso haremos en la siguiente lección. Pero para la etiqueta dentro de un botón de texto, etiquetar y borrar esa vista. Y simplemente voy a mover nuestra imagen con el trato sido en la etiqueta para nuestro botón. Y así como eso, realmente no se puede ver ningún cambio visual. Pero sin embargo, si ejecutas esto en el simulador, entonces notarás que puedes tocarlo. Es un botón natural. Otra forma, si no quieres lanzar tu simulador es que puedes pulsar este botón aquí mismo para la vista previa en vivo y estoy absolutamente empezar. Sí. Entonces puedes seguir adelante y tengo que golpear Resume en eso. Está bien. Ya puedes ver en el Canvas, porque tengo activado Live Preview, puedo probar el botón. Esa fue tu primera introducción al manejo de la interacción del usuario en una aplicación rápida de UI. De verdad se están uniendo las piezas. Hagamos una recapitulación rápida. Aprendiste a instanciar botones, y esa es solo una forma elegante de decir crear instancias de botones. Tu aprendiste sobre los cierres y cómo son solo bloques de código como funciones sin nombre de función. Y luego aprendiste sobre los cierres finales, que son sólo una taquigrafía. Y solo para recordarte, un cierre final es cuando tienes un cierre como parámetro en una llamada a método. Y luego se saca de esa lista de parámetros y en su lugar se pone al final de esa llamada al método. En la siguiente lección, te voy a mostrar un concepto clave de la interfaz de usuario de Swift que te va a permitir cambiar datos y que la interfaz de usuario detecte automáticamente el cambio y luego actualice la interfaz de usuario por sí misma. Está bien, nos vemos en la siguiente lección. 12. 11: propiedades de estado: Hola y bienvenidos. En la última lección, aprendiste sobre el botón de interfaz rápida de usuario y cómo manejar la interacción del usuario. Bueno, para cambiar los datos y luego reflejar ese cambio en la interfaz de usuario, tenemos que aprender sobre las propiedades del estado y eso se trata esta lección. Vamos a sumergirnos justo en. Muy bien, así que quería volver a visitar esa vista, actualizar diagrama del ciclo de vida por solo un segundo. ¿ Recuerdas cuando mostramos un enlace desde los datos hasta el código de vista? Bueno, sigamos adelante y hagamos eso con nuestro proyecto de juego de cartas de guerra. Entonces, ¿qué tipo de datos tenemos en este proyecto? Bueno, si echan un vistazo a la interfaz de usuario aquí, pueden ver que necesitamos hacer un seguimiento de qué carta tiene el jugador, qué tarjeta tiene la CPU, y luego también las puntuaciones del jugador y de la CPU. Entonces eso son cuatro piezas de datos. Vamos a crear cuatro propiedades en nuestra estructura de vista de contenido para representar esas cuatro piezas de datos. Entonces justo debajo del corchete rizado de apertura de la vista de contenido, voy a seguir adelante y declarar var CPU L2 jugador primera carta igual. Y sólo imitaré los autos que tenemos ahí. Entonces vamos a tener tarjeta también. Y en realidad me dejaré solo, lo cambiaré. Podemos poner algo más para iniciarlo. Y luego tarjeta CPU es igual, digamos tarjeta nueve. Y entonces representemos el marcador de jugador. Y esto va a ser un entero. Empecemos con 0 también. Puntuación de la CPU igual a 0. De acuerdo, entonces ahora tenemos estas cuatro propiedades que representan el estado del juego. Estas cuatro propiedades son nuestra fuente de verdad porque representa cómo debe verse la interfaz de usuario. Ahora, ¿cómo reflejamos estas piezas de datos en nuestra interfaz de usuario? Bueno, necesitamos hacer referencia a estas propiedades dentro de nuestro código de vista. Recuerde que estas propiedades que se declaran en el alcance de esta estructura significa que está disponible para ser referenciada en cualquiera de los métodos de la misma estructura, así como en este bloque de código para nuestra propiedad corporal computada. Entonces si buscamos aquí abajo para esta primera carta que está justo aquí, y hemos codificado duro una cuerda ahí dentro, diciendo carta a. En lugar de codificar duro una cadena allí, Vamos a poner un valor dinámico especificando nuestra propiedad de la tarjeta de jugador. Entonces actualicemos nuestra vista previa automática y solo para asegurarnos de que eso funcione y todo esté bien. Y se puede ver que esa carta cambia la carta cinco porque eso es lo que es el valor de la propiedad de la carta del jugador. Hagamos lo mismo para la tarjeta CPU en lugar de tarjeta de codificación dura tres aquí, Vamos a poner la propiedad de la tarjeta de CPU. Ves ese cambio. Y aquí abajo, para el marcador en lugar de una cadena de 0, Vamos a poner nuestra propiedad de marcador de jugador. Ahora vas a notar un error aquí. Dice que no hay coincidencias exactas en llamada al inicializador. Y eso es porque para inicializar una instancia de texto, necesitamos pasar una pieza de datos de cadena. Pero marcador de jugador, recuerda, Esta es una propiedad int, por lo que contiene datos int. Pero cómo podemos evitar esto es que podemos convertir nuestro int en una cuerda. Bueno, al menos la representación de cadena de un número. Entonces la forma en que hacemos eso es que podemos crear una nueva instancia de cadena y simplemente pasar en el, podemos pasar en el entero. Por lo que este sería marcador de jugador. Y vamos a hacer lo mismo para la puntuación de CPU. Vamos a crear una nueva cadena y vamos a pasar en la puntuación de la CPU. Y así, tenemos nuestras cuatro piezas de datos siendo representadas en el código de vista y a su vez, la UI. Ahora todo lo que tenemos que hacer es cuando el usuario toca el botón, podemos actualizar estos datos en las propiedades y hacer que la UI cambie automáticamente, ¿verdad? Bueno, no tan rápido. Por qué no seguimos adelante y tratamos de hacer eso y echemos un vistazo a lo que sucede. Entonces en la última lección, habíamos cambiado esta imagen de acuerdo en un botón real. Ahora mismo ese cierre de acción está vacío. Pongamos algún código dentro este cierre de acción para nuestro botón. Aquí vamos a actualizar las tarjetas y también vamos a actualizar la puntuación. Ahora si intentas actualizar la propiedad como aquí, intentemos actualizar la tarjeta del jugador es igual a la carta 11. Ya verás que no puedes. Xcode se quejará y dirá, no se puede asignar a la propiedad yo es inmutable. Ahora auto se refiere a la instancia de una vista de contenido e inmutable significa que no se puede cambiar. Ves las instancias son tipos de valor y debido a la forma en que se asignan en la memoria, no se pueden cambiar. Ahora, sé que eso no tiene absolutamente sentido para ti en este momento, pero te prometo en una lección futura, hablaremos de eso y entonces tendrá todo sentido por ahora, solo entender que no podemos cambiar el valor de nuestra propiedad a menos que utilicemos un envoltorio de propiedad. Un envoltorio de propiedad es una palabra clave frente a nuestra declaración de propiedad que cambia su comportamiento. Ahora específicamente, estoy hablando del envoltorio de propiedad estatal. Entonces sigamos adelante de nuevo a nuestras declaraciones de propiedad y veamos cómo usó este envoltorio de propiedades estatales para cambiar los comportamientos de estas propiedades para que podamos cambiar los valores. Todo lo que tenemos que hacer es frente a la palabra clave var de nuestra declaración patrimonial, vamos a escribir en Estado. Y al agregar esa palabra clave en estado, eso va a indicar que esa propiedad de la tarjeta de jugador es en realidad una propiedad estatal y nos va a permitir actualizar el valor que contiene. Entonces sigamos adelante y pongamos este envoltorio de propiedad frente los cuatro de nuestra propiedad para que todos sean propiedades de estancia. Los inmuebles estatales tienen dos características especiales. número uno es que se pueden cambiar los datos en ellos. Ya hablamos de eso. Pero el número dos es que dentro del código de vista, cualquier referencia a las propiedades del estado, it, se les notificará de los cambios de datos y luego tu UI se actualizará automáticamente en función de esos nuevos datos. Entonces sigamos adelante, bajemos al cierre de acción de nuestro botón y tratemos de actualizar algunas de estas propiedades estatales. Y veamos cambiar la interfaz de usuario. De acuerdo, entonces aquí estamos. Y como puedes ver ahora se ha ido el error. Y puedo poner tarjeta CPU igual a tarjeta 12. Y sigamos adelante y actualicemos el marcador también. Podría bien sólo a eso. Entonces voy a decir marcador de jugador más igual a uno. Eso significa incrementarlo en uno. Puntuación de la CPU más igual a uno también. Y salvaremos esto. Entonces. Vamos a seguir adelante y hacer un adelanto en vivo, a ver si podríamos hacer eso. Está bien, así que este es un adelanto en vivo. Cuando toque este botón, se va a ejecutar el cierre aquí. ¿ No fue genial? Entonces cuando toqué ese botón, actualizamos los datos en las propiedades del estado. ¿ Verdad? Y debido a que en nuestro código de vista, hace referencia a esas propiedades estatales, se les notificó y se volvió a renderizar la UI para mostrar los nuevos datos. Ahora el problema es que cada vez que tocamos el botón, quiero decir, está incrementando la puntuación, lo cual es genial, pero las cartas de jugador no están siendo aleatorizadas. Entonces lo que podemos hacer es usar el método aleatorio del instructor, generar un número aleatorio. Y luego vamos a anexar ese número aleatorio al reverso de la cadena de la tarjeta para generar una nueva tarjeta. Entonces echemos un vistazo a cómo funcionaría eso. Generar un número aleatorio entre dos y 13. Porque si nos fijamos en la biblioteca de activos, tenemos tarjeta a todo el camino a la tarjeta 14 en realidad. Por lo que probablemente quisiera generar dos a 14. Entonces voy a decir Dejar jugador rand es igual al int dot random. Y este método nos permite especificar un rango. Se puede especificar un rango con el extremo inferior del rango, punto, punto, punto y luego el extremo superior. Y debe ser incluyente, si recuerdo correctamente. Y ya veremos en un segundo. Y declaremos otra. Rand de CPU es igual a int dot-dot-dot aleatorio en dos, dot-dot-dot y 14. Y entonces lo que vamos a hacer es en lugar de especificar el número dentro de la cadena codificada, solo voy a especificar tarjeta. Y luego voy a agregar jugador Rand y agregar CPU rand. Ahora bien, tal vez no podamos hacer esto y como se esperaba, no podemos. Porque como saben de antes en esta lección, lo que estamos tratando de hacer aquí es que estamos tratando anexar un entero a una cadena. Y lo que tenemos que hacer en su lugar es convertir ese entero en una cadena primero y obtener la representación de cadena de ese entero. Y ahí, esto debería ser dinámico ahora. Entonces echemos un vistazo a esto y veamos si es lo que esperamos. Esto es perfecto. Se aleatorizan las tarjetas. Lo que no es perfecto es el marcador aquí abajo. Todavía tenemos que determinar qué bando gana y luego incrementar el puntaje apropiado. Entonces voy a comentar estas dos piezas de código porque no queremos simplemente estar incrementándolo en una cada vez. Ahora antes de terminar esta lección, realmente quiero señalar y subrayar lo poderoso que es este marco. Lo que estamos haciendo aquí es tocar un botón. Se está ejecutando este cierre y estamos cambiando el valor en esta propiedad estatal. Y debido a que la propiedad estatal está siendo referenciada dentro de nuestro código de vista aquí, está detectando ese cambio de datos y luego re-renderizar lo que vemos en la UI. Y eso sucede automáticamente. Todo lo que estamos haciendo es cambiar los datos. En el pasado con el kit de UI, este sistema no existía. Lo que tendríamos que hacer en su lugar es actualizar los datos, igual que estamos haciendo aquí. Pero también tendríamos que actualizar cada elemento de vista manualmente y decirle qué mostrar. Entonces lo que tendríamos que hacer es obtener una referencia a esta imagen y luego generar una imagen partir de este nombre de activo desde la biblioteca de activos, para luego establecer ese activo de imagen en este ImageView. Y tendríamos que hacer eso para este también. Entonces tendríamos que hacerlo por el texto aquí y las etiquetas. Entonces todo lo que teníamos que hacer manualmente. Ahora, todo lo que tenemos que hacer es actualizar los datos en cualquier pieza de UI atada a esas propiedades del estado detectarán el cambio y se actualizarán automáticamente. Ahora por definición, una propiedad estatal es una pieza de datos de la que depende esta vista de contenido. No es algo de lo que otros puntos de vista les importaría o dependería. Y así por esa naturaleza, podemos agregar la palabra clave privada y simplemente controlar el nivel de acceso a estas piezas de datos para que solo sean accesibles dentro del contexto o del alcance de esta estructura de vista de contenido. Ya que es sólo esta vista de contenido la que depende de estas propiedades estatales. Muy bien, estamos casi en la línea de meta. Solo tenemos que comparar los valores de la tarjeta y luego actualizar las propiedades del estado de puntuación apropiadamente. Eso sigue siendo una recapitulación rápida. Ahora, aprendes a hacer referencia a propiedades en tu código de vista. Aprendimos sobre el envoltorio de propiedades estatales. También aprendimos sobre alguna nueva terminología incluye valores codificados, valores dinámicos, e inmutables, lo que significa que no se puede cambiar. En la siguiente lección, vamos a repasar los condicionales y cómo comparar valores usando sentencias if. Está bien, nos vemos ahí. 13. 12: si las declaraciones: Hola y bienvenidos. En esta lección vamos a hablar un constructo rápido que te va a permitir escribir código que diga si esto, entonces aquello, ahora esto es fácil de usar, pero la poderosa sintaxis te va a permitir expresa lógica a un nivel completamente nuevo. De acuerdo, con eso dicho, vamos a sumergirnos enseguida. Está bien, así que tengo un parque infantil totalmente nuevo aquí. Quiero mostrarles cómo funcionan las declaraciones antes aplicarlo a nuestro proyecto de juego de cartas de guerra. Todo lo que tengo aquí son un par de constantes, en realidad, más de una pareja, tengo un montón de constantes con diferentes valores simples, algunos enteros, cadenas, y valores booleanos. Y quiero usar estas constantes demostrar cómo funcionan las declaraciones IF. Ahora de nuevo, la sentencia if es muy poderosa porque permite ejecutar código basado en algunas condiciones. Entonces voy a usar estas constantes como mis condiciones. Primero echemos un vistazo a una declaración básica de IF, declaración. Primero lo voy a escribir y luego te explicaré cada una de las partes. Entonces comienzas con la palabra clave if y luego pones algún tipo de valor o condición que evalúa a un resultado booleano. Entonces solo voy a poner ie. Y voy a abrir un par de corchetes rizados. Y dentro de aquí, solo imprimiré Hola Mundo, ¿verdad? Y eso por sí mismo es la declaración if más simple. Como puede ver, comienza con la palabra clave if y luego seguido un valor booleano o algún tipo de instrucción de código que se evalúa como un resultado booleano, seguido de un conjunto de corchetes rizados. Y dentro de los corchetes rizados pones el código que quieres ejecutar. Si la condición es verdadera, en este caso, e es falsa, ¿no? Entonces no va a ejecutar ese código porque no evalúa a verdadero. No obstante, si cambio esta E y estaba probando F en su lugar, entonces este código se ejecutaría porque se evalúa como verdadero. Ahora se puede poner bastante loco porque puedes encadenar estas cosas juntas. Entonces una de las formas en que puedes encadenarlos juntos es usar end, y eso es un doble ampersand. Entonces permítanme sólo indicar eso ahí. Y cómo funciona esto es si escribieras f double ampersand, Digamos g. Entonces, ahora estás probando ambas condiciones y porque estás usando end, ambas condiciones tienen que ser ciertas para este código a ejecutar. Entonces en este caso, porque f y g son a la vez verdaderas, verdaderas y verdaderas significa verdaderas. ¿De acuerdo? Y otro ejemplo es que puedes usar o. Por lo que estos son tubos dobles. La llave de pipas, muchos principiantes, no están seguros de cómo presionarla. En mi teclado Mac, esta tecla está justo debajo de la tecla Eliminar y justo encima de la tecla de retorno, y es el personaje de la tecla de barra inversa. Entonces tengo que mantener pulsado el turno y tengo que golpear la contrasta para conseguir esa pipa. Por lo que tubos dobles, podría ser diferente en tu teclado. Esto es O cuando usas un OR en lugar de un final y te estás encadenando a condiciones como esa. Estás diciendo que si cualquiera de las condiciones uno es verdadera o la condición dos es verdadera, entonces ejecuta este código. Entonces, por ejemplo, f y g son las dos verdaderas. Entonces eso definitivamente ejecutará este código. Si hago f y e, Eso es a es falso. Recuerda, este código seguirá ejecutándose porque al menos una de las condiciones es verdadera. Ahora de nuevo, esto puede volverse bastante loco porque puedo seguir cambiando, puedo seguir haciendo ors, o incluso puedo echar un final ahí dentro. Entonces hagámoslo. Pero este tipo de cosas se vuelve confuso ahora porque esto se puede leer de un par de maneras diferentes. ¿ Son E y G? Y luego, ¿o F? ¿ O es F o E y G? Estos ven lo que estoy diciendo. Entonces, para, si pongo corchetes alrededor de estos, esto podría tener más sentido. Si hago esto. Eso es decir si f es verdad o E y G son verdaderas, entonces ejecuta el código. No obstante, también podría ponerle corchetes a su alrededor así. Si F o E es verdadero y G es verdadero, entonces ejecute el código. Por lo que puedes usar corchetes, corchetes redondeados para ayudarte a diferenciar qué condiciones debes evaluar primero. De acuerdo, hasta ahora hemos estado usando sólo los valores booleanos, pero aún hay más. Quiero mostrarte con la sintaxis para una declaración if antes de pasar a mirar enteros y cadenas. Entonces junto con la declaración if, también puedes extender esa declaración if para probar otra condición, porque esto es solo probar una condición, ¿verdad? Entonces puedes seguir el corchete rizado de cierre del primer bloque de código, ¿verdad? De lo contrario si, y luego escribes otra condición. Entonces digamos else-if. E, entonces pon eso más, si G, entonces haz eso. Entonces lo que va a pasar aquí es que va a probar este padecimiento. Si esto se evalúa como falso, entonces va a probar el siguiente y va a bajar en cascada. Si esto es falso, entonces va a bajar al siguiente. En cualquier momento mientras está revisando estas condiciones. Si uno de ellos es cierto, entonces va a entrar en esa rama. Se va a ejecutar ese bloque de código y se va a saltar el resto. Por lo que esto permite probar, en este caso, tres ramas o caminos diferentes y sólo elegir uno, siendo el primero cierto. Pero teniendo en cuenta que comprueba estas ramas desde estas condiciones, quiero decir, de arriba a abajo. Entonces el primero que golpea eso es cierto. Esa es la rama que va a bajar. Y por último, también hay otra característica de las declaraciones if. Puede haber una especie de catch all branch. Si ninguna de esas condiciones anteriores es cierta, entonces puedes tener un bloque de código else. Por lo que este bloque de código se ejecuta al final mismo. Si ninguna de las condiciones fuera cierta y no ejecutó ninguna de esas ramas. Entonces esto es algo así como tu captura todos son a prueba de fallas. Y de nuevo, todos estos son opcionales. Se puede tener un elsif, no se puede tener más ifs. No se puede tener ninguna otra y sólo se puede tener otra. Entonces si esta condición no es cierta, entonces sólo va a bajar aquí. De acuerdo, entonces esta afirmación si es realmente poderosa. La sintaxis es realmente simple de entender, pero te da tanta flexibilidad en qué sentencias de código se ejecutarán dependiendo de lo que esté sucediendo dentro de tu aplicación. De acuerdo, así que voy a deshacer esto que podamos ver algo así como una declaración si de pleno derecho aquí. Y les voy a mostrar cómo tal vez los enteros o cadenas pueden ser evaluados como condiciones. Ahora en el ejemplo hasta ahora, acabo de hacer referencia a valores booleanos, y eso es simple. Pero al trabajar con otros tipos de datos como enteros y cadenas, es posible que tenga que usar esos en una declaración real para evaluar para obtener un resultado booleano, ¿verdad? Por ejemplo, en lugar de g, que es solo un valor booleano verdadero, usemos a. Para evaluar un resultado booleano, tengo que usar un operador de comparación, ¿no? Entonces puedo usar mayor que si a es mayor que 0, ¿verdad? Esto puede evaluar a verdadero o falso. Y aparte de mayores que, aquí hay un par más que puedes usar. Tan mayor que, menor que, mayor que o igual a, y tienes menor que o igual a. Y luego hay igualdad. Con igualdad, no usas un solo signo igual porque eso es para asignación. Como puedes ver aquí arriba, estamos asignando estos valores en constantes. Para comparar la calidad, se utiliza un signo doble igual en su lugar. Entonces puedo decir aquí abajo, hace un igual a 0, y por supuesto que no. Por lo que esta afirmación aquí se va a evaluar a falso. Y debido a que se trata de un operador final, ambas condiciones tienen que ser ciertas. Y porque éste ya es falso, entonces no va a entrar a esta rama. De todos modos. Nosotros también podemos cambiar estos. Entonces si b es menor a tres o cuatro, quiero decir, y si c es igual a 10. Entonces esos son algunos ejemplos de operadores de comparación que evalúan a verdadero o falso. Ahora para las cuerdas, también puedes hacer eso. Se puede, se puede evaluar d, por ejemplo, es una cadena y se puede probar si es igual a hola. Entonces eso es una cosa que puedes hacer con las cuerdas. Todavía se puede utilizar mayor que o igual a. Por ejemplo, si hubiéramos dejado h igual a mundo. Y podemos decir si D es mayor que h. Entonces podemos hacer eso. En este caso, se va a comparar la H con la W. Y como h no es mayor que w, porque viene antes de W, entonces esto va a ser falso. Una cosa más interesante que quiero mostrarles es el uso del signo de exclamación. Entonces este, básicamente voltea el valor booleano. Entonces si g era, G es verdad, ¿verdad? Si pongo el signo de exclamación delante de él, básicamente va a voltear el valor booleano. Entonces g es cierto. Tengo el signo de exclamación. Se va a convertir en falso. Entonces no se va a ejecutar esto. Podrías ponerlo frente a esto, por ejemplo. Y una docena, no equivale a 0 porque a es uno, como se puede ver allá arriba. Pero tener esto delante va a voltear eso a verdad. Y entonces ahora que lo pienso, también se puede poner a prueba la desigualdad. Entonces no es igual. De acuerdo, entonces puedo probar si a no es igual a 0, lo cual es cierto. Pero entonces porque tengo este signo de exclamación delante de él, va a voltearlo a falso. Entonces mucha flexibilidad aquí, y esto es sólo un ejemplo, ¿verdad? Entonces no tiene que ser así de complicado. Ahora quiero volver a nuestro juego de cartas de guerra y usar la declaración if para determinar qué carta es más grande y luego incrementar ya sea la puntuación del jugador o la puntuación de la CPU. Está bien, así que aquí tengo el proyecto de juego de cartas de guerra. Y si echan un vistazo a esta parte aquí donde estábamos actualizando la puntuación, simplemente estamos incrementando la CPU y puntuación del jugador con cada uno un trato del botón. Ahora que has aprendido sobre si las declaraciones en el patio de juegos de Xcode, estoy seguro que es muy trivial para que lo implementes para que estés comparando jugador corrió versus CPU RAM y viendo qué número es mayor para determinar qué puntaje actualizar. Ahora, porque etiquetamos correctamente nuestros activos a ser los más bajos y ACE siendo los más altos, teniendo un valor de 14. Es muy trivial comparar. Simplemente comparas ese número final, ¿verdad? Y esencialmente ese es el número aleatorio. Entonces si crees que puedes hacer esto, pausa el video ahora mismo, y pruébalo por ti mismo. Aprenderás mucho. Te lo prometo, aunque le des una oportunidad y no lo consigues, la lección se va a pegar mucho más. Así que adelante y pausa el video, pruébalo, y luego desparen y mírame hacerlo aquí. Muy bien, Así que bienvenido de nuevo. Vamos a implementar esta declaración if para ver qué tarjeta es más grande. Entonces voy a empezar con si. Y voy a probar primero si el número del jugador es mayor que el número de CPUs. Está bien, voy a usar mayor que, si ese es el caso, entonces voy a incrementar la puntuación de jugador. De lo contrario, sólo voy a aumentar la puntuación de la CPU. Ahora. No me importan los lazos, y por eso no estoy comparando la igualdad entre los dos números aleatorios. Pero definitivamente podrías hacer eso en tu versión si así lo deseas. En realidad, hay un problema con la forma en que lo estoy haciendo aquí. El CPU tiene una ventaja injusta porque en el caso de un empate, la CPU sí consigue la puntuación correcta usando esta declaración else. Entonces, por lo tanto, como que sí tengo que probar el otro caso. Entonces voy a probar else-si la CPU rand es mayor que el jugador alrededor, entonces puntuación de CPU más uno. De lo contrario, si esas dos condiciones no son ciertas, entonces es empate y no quiero hacer nada. Está bien, ahora probemos esto. Entonces voy a volver a tocar la vista previa en vivo, y sólo lo haremos aquí mismo en el Canvas. Voy a pegarle trato. Por lo que el 14 definitivamente es más grande que cinco. Por lo que el jugador obtiene un marcador. Jack es definitivamente, bueno, eso es un, eso es un 11 es mayor que 3, cuatro es mayor que tres. Por lo que parece estar funcionando correctamente. Enhorabuena, el juego de cartas de guerra está completo. Has aprendido a construir interfaces de usuario, a codificar en Swift, y has completado tu primera aplicación. Piensa en el primer día de este reto de 14 días. ¿ Cómo te sentiste entonces? ¿ Estabas nervioso de que crees que podrías hacer todo esto? Y ahora mira lo lejos que has llegado. ¿ Cómo te sientes ahora con el desarrollo de aplicaciones? Ahora he intentado que esto sea lo más fácil posible de entender y espero que sean capaces de adquirir algunas nuevas habilidades. Ahora sé que estoy haciendo que esto suene como el final, pero en realidad es solo el comienzo de tu viaje. En la siguiente lección, les diré cuáles son los próximos pasos y a dónde ir desde aquí. 14. 13: desafío extras: Hola y bienvenidos a la Lección 13. Ahora, en esta lección, va a ser más un reto práctico y práctico. Quiero que intentes construir esta app por tu cuenta. Ahora, tienes todas las habilidades que necesitas en base a las lecciones del uno al 12. Y este ejercicio va a ser una gran manera de reforzar lo que has aprendido y también de identificar cualquier vacío en tus conocimientos en este punto para que podamos ir a revisarlo y también ir y descifrar qué es lo que necesitas para ponerte al día antes de continuar. De acuerdo, Así que déjame caminar por esta app. Tienes título, tienes número de créditos, tienes algunas imágenes. Y cuando pulsas este botón, simplemente aleatoriza las imágenes. Si no coinciden, entonces vas a perder créditos. Pero sin embargo, si consigues tres coincidentes, lo cual parece que no puedo hacer en este momento. Ah, ahí vamos. Entonces ganarías créditos. Entonces esto se parece mucho al juego de cartas de guerra, excepto que ahora hay tres cosas que se aleatorizan en lugar de dos. Y los activos de imagen están en la descripción en un enlace. Para que puedas asegurarte de agarrar esos. Entonces tendrás todo lo que necesites. Ya sea que pienses que esto es demasiado fácil o si es demasiado duro, de cualquier manera, te recomiendo encarecidamente que lo pruebes porque realmente es la mejor manera de aprender, aunque te atasques. Cuando miras la solución y averiguas cómo superar ese obstáculo en el que estás atascado. Va a ser extra significativo y realmente va a ayudar a comprometerlo a la memoria. Y esta creencia sobre el aprendizaje práctico se debe a mi propio fracaso al principio cuando intenté aprender iOS. Entonces esto no es sólo algo que leí o algo que escuché. Esto es de mi propia experiencia personal que es, no hay nada más que pueda reemplazar como la mejor manera de aprender. 15. 14: ¿qué hay después?: Ya lo has conseguido. ¿ A dónde vas desde aquí? ¿ Qué aprendes a continuación? Bueno, todavía hay un montón de habilidades que dominar antes de que finalmente puedas construir cualquier tipo de aplicación que quieras. Pero espero que al menos en hacer el juego de cartas de guerra y completar este reto, te haya ayudado a romper algunas barreras mentales sobre si puedes o no hacer esto. Porque ahora debes saber que puedes hacer esto. Y es sólo cuestión de tiempo. Más aprendizajes, más obstáculos superados, y más práctica antes de que finalmente alcances tu meta, voy a compartir contigo las próximas cinco cosas que puedes hacer para progresar en tu viaje de app. Número uno o más vistas y contenedores a través de hacer el juego de cartas de guerra, ya te enteraste de un puñado de ellos, como texto, botones de imagen, pilas, pero hay muchas más VM y contenedores de los que puedes aprender como toggles, pickers, estado, formas de barras, cuadrículas, listas, y la lista simplemente continúa. Ahora aprender a usar más vistas y contenedores es como conseguir un camión cargado de piezas lego. Tus opciones se van a expandir mucho. Número dos, más tipos de apps. ¿ Por qué? Bueno, piénsalo. Nada nuevo viene de cero. Siempre te estás basando en tus experiencias anteriores, lo que has visto, en lo que has hecho, en lo que has intentado. Entonces si quieres construir tu propia app, lo mejor que puedes hacer en este punto de tu viaje es exponerte a tantos tipos diferentes de apps como sea posible. Con cada nueva aplicación, vas a aprender nuevas arquitecturas, nuevos patrones y nuevas formas de hacer las cosas. Por ejemplo, ¿cómo se navega de una pantalla a otra? ¿ Cómo se descargan datos de Internet? ¿ Cómo se guardan los datos en una base de datos? ¿ Y cómo permite que los usuarios creen cuentas e inicien sesión? Estos son todo tipo de apps diferentes a las que debes estar expuesto antes de poder incorporar estos mismos elementos a tu app. Número tres, más, Xcode y veloz. Ahora en este reto, hemos tocado ligeramente los conceptos básicos de Swift y cómo navegar por el siguiente código, pero definitivamente hay más profundidad en ambos. Azure Apps se vuelven más complejas en tus proyectos, hazte más grande, vas a encontrar más problemas y más dólares por resolver. Y vas a necesitar un dominio más profundo lenguaje de programación Swift. Entonces, ¿cómo se aprende más rápido y Xcode? Bueno, se remonta a construir más aplicaciones. A medida que construyes cada aplicación, naturalmente vas a aprender más rápidas y técnicas de Xcode. Número 4, MVVM. Ahora éste es bastante importante en Swift UI. Este es el patrón de arquitectura principal y es sinónimo de Model-View-ViewModel en el juego de cartas de guerra que hiciste. Teníamos la parte de vista y teníamos algunas propiedades de datos en ella. Pero en una aplicación de interfaz de usuario de Swift más grande, tendrías modelos que también representen tus datos, y ver modelos que soporten tus vistas. Este patrón de arquitectura existe en cualquier aplicación Swift UI más grande. Por lo que es bastante importante saber, hacer algunas búsquedas en Google o YouTube en MVVM para entenderlo a nivel conceptual. Y luego la próxima vez que hagas un tutorial de UI rápido, o intenta detectar el patrón tú mismo o si estás construyendo tu propio Swift do I apps definitivamente trato poner el patrón en práctica. Número cinco, más marcos de Apple. Apple tiene una tonelada de frameworks en los que puedes aprovechar con tu app. Simplemente agrega el framework a tu proyecto Xcode, lee la documentación y estarás agregando nuevas capacidades a tu aplicación como machine learning, reality aumentada, etc. Ahora esto va a llevar un poco más de experiencia porque hay que leer y entender la documentación. Pero es una buena habilidad comenzar a entrenar porque cada año van a haber nuevas herramientas y nuevas plataformas y nuevos marcos para que aprendáis. Como desarrollador de aplicaciones, el aprendizaje nunca se detiene y tu capacidad para aprender rápidamente y para probar cosas realmente determinará tu éxito a largo plazo. Esas son las cinco áreas que te recomiendo que exploraste hacer avances en tu viaje de app. Yo quiero agradecerles tanto por quedarse a través de este reto y por aprender conmigo. Espero que hayas tenido una experiencia impresionante. Y si lo has tenido, por favor compártelo con tus amigos y familiares. Por favor ayúdame a correr la voz y cuéntale a todos sobre el código con Chris. Te agradezco mucho y gracias por dejarme ser parte de tu viaje de app. Está bien, nos vemos en la siguiente lección.