Programar método de búsqueda

Clase 26 de 36Curso de Desarrollo de Aplicaciones iOS con SwiftUI

Resumen

¿Cómo mejorar la pantalla de inicio y programar el método de búsqueda?

En esta parte del desarrollo de nuestra aplicación, nos enfocaremos en programar un método de búsqueda y mejorar la funcionalidad de nuestra pantalla de inicio. Esto nos permitirá implementar una navegación más dinámica, así como funcionalidades adicionales para mejorar la experiencia del usuario.

¿Qué cambios realizamos en la pantalla de inicio?

Para comenzar, necesitamos realizar algunos ajustes en nuestro archivo de home. Vamos a declarar varias variables necesarias:

  • Juego encontrado: Creamos una variable que representa el juego encontrado, utilizando el property wrapper @ObservedObject para que sea un objeto observable. Esta variable tomará datos de la clase searchGame que programamos anteriormente.

  • Estado de la vista activa: Otra variable que crearemos es @State, llamada isGameViewActive. Esta variable indicará si la vista del juego está activa.

Una vez que el método de búsqueda localice un juego, asignaremos el juego encontrado a la variable correspondiente y activaremos isGameViewActive. Inicialmente, se establecerá como false hasta que se encuentre un juego.

¿Cómo completamos el método de búsqueda?

Para implementar el método de búsqueda, seguiremos este proceso:

  1. Eliminar código innecesario: Debemos asegurarnos de limpiar y eliminar cualquier código que ya no necesitamos en nuestra función WatchGame.

  2. Configurar la llamada de búsqueda: Haremos uso de la variable juegoEncontrado para buscar el nombre del juego:

    juegoEncontrado.search(name)
    
  3. Simulación de espera: Para simular un retraso mientras el servidor responde, podemos utilizar la función DispatchQueue.main.asyncAfter. Aquí abajo se muestra cómo implementarlo:

    DispatchQueue.main.asyncAfter(deadline: .now() + 1.3) {
        // Código a ejecutar después del retraso
    }
    
  4. Verificación y manejo de resultados: Debemos verificar si el gameInfo generado tiene elementos. Si no hay elementos (como por ejemplo, si buscamos un juego inexistente como Sonic), mostrará una alerta de que no se encontró ningún juego:

    if juegoEncontrado.gameInfo.count == 0 {
        isGameInfoEmpty = true
    } else {
        // Asignación de valores encontrados, como URL, título, estudio, etc.
    }
    
  5. Actualizar valores: En caso de que la búsqueda sea exitosa, asignamos los valores de URL, título y otras propiedades a las variables correspondientes.

¿Cómo activamos la vista de juegos?

Una vez que tenemos los datos necesarios de un juego, la aplicación activará la vista de GameView:

  • Modificar el NavigationLink: En este paso, configuramos el NavigationLink para que, en lugar de redirigir directamente a un reproductor de video, lleve a la vista GameView que hemos preparado. La implementación será algo como esto:

    NavigationLink(destination: GameView(...)) {
        // Contenido del enlace
    }
    
  • Pasar la información: Nos aseguramos de pasar todos los valores necesarios a la GameView, como URL, título, estudio, etc., asegurándonos de que todos estos valores estén bien definidos.

¿Cómo hacemos la aplicación más interactiva?

Para hacer nuestra aplicación más dinámica e interactiva, implementamos el método WatchGame para cada elemento interactivo de nuestra lista de juegos:

  • Actualizar cada botón: Dentro de cada botón o acción de juego, usamos WatchGame con el nombre del juego. Esto se implementa de manera similar a lo siguiente:

    WatchGame("NombreDelJuego")
    
  • Enumeramos y asignamos los nombres de los juegos que deberían buscarse al interactuar con sus correspondientes elementos en la aplicación.

Este proceso nos permite dinamizar cómo los usuarios interactúan con nuestra aplicación al buscar y mostrar información específica de cada juego directamente en la pantalla de GameView. Además, estas mejoras no solo optimizan la funcionalidad, sino también la experiencia de usuario en nuestras aplicaciones móviles, formando así parte integral del desarrollo moderno en Xcode y SwiftUI.