es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SwiftUI: ¿Puedes usar AppStorage con JSON decodificado?

Tengo una lista de países y un campo en ellos es “favorito”. Si un usuario activa el botón de favorito, el valor booleano de “favorito” de ese país es “true”. En otra parte de mi código, uso “favoritos” para filtrar todos los países y tener una vista separada que muestra solo los países favoritos.

Quiero persistir los “países” para poder volver a cargar la vista de favoritos en futuras visitas a la aplicación. ¿Puedo usar “@AppStorage” para esto o estoy haciendo algo mal? CoredData parecía un poco excesivo cuando lo estuve investigando. Soy nuevo en SwiftUI, viniendo de JavaScript, así que disculpa si parece trivial.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes usar @AppStorage para persistir los countries. Aquí te explico cómo hacerlo:

    1. Agrega una propiedad @AppStorage a tu modelo de vista para almacenar el array de countries:
      @AppStorage("countries") var countries: [Country] = Bundle.main.decode("Countries.json")
      

      Este código inicializa la propiedad countries con el array decodificado de objetos Country del archivo Countries.json y utiliza la propiedad envuelta @AppStorage para persistir automáticamente el valor de countries entre distintas ejecuciones de la aplicación.

    2. Actualiza tu propiedad computada favorites para usar el array persistido de countries:

      var favorites: [Country] {
         return countries.filter { $0.favorite }
      }
      

      Este código simplemente filtra el array countries basándose en el atributo favorite de cada objeto Country.

    3. Por último, actualiza el código que alterna el atributo favorite de un país para que también actualice el array persistido de countries:

      func toggleFavorite(for country: Country) {
         if let index = countries.firstIndex(where: { $0.id == country.id }) {
             countries[index].favorite.toggle()
         }
      }
      

      Este código encuentra el índice del objeto Country en el array countries, alterna su atributo favorite y luego actualiza el array countries. Gracias a la propiedad envuelta @AppStorage, este array actualizado de countries también se persistirá entre distintas ejecuciones de la aplicación.

    Al utilizar @AppStorage de esta manera, podrás persistir fácilmente tus datos sin la complejidad adicional de Core Data.

Comments are closed.