Bienvenido, me llamo Luis y en esta ocasión les traigo otro nuevo tutorial.
Usar Codable y UserDefaults con estructuras para guardar los modelos sin conexión en Swift
La idea de guardar una estructura en UserDefaults
podría haber cruzado por su mente al tratar con información relacionada con los usuarios o cualquier otra información confidencial que obtenga de sus llamadas API en su aplicación iOS. O tal vez desee guardar rápidamente su modelo sin conexión para buscarlo sin conexión de red en su aplicación.
Ya que UserDefaults
es uno de los lugares más seguros para almacenar información relacionada con el usuario o cualquier información privada del usuario, resulta difícil guardar el modelo completo de sus datos JSON en él.
Hay dos posibles soluciones para esto. O puede guardar cada propiedad de su estructura una por una en UserDefaults (que es una tarea muy agitada, definitivamente no se recomienda), o puede usar cualquier biblioteca de terceros, como ObjectMapper
o Moya-ObjectMapper
, que le ayudará a codificar y decodificar su modo de estructura. Esto luego se puede guardar en UserDefaults, pero créame, eso también es una gran cantidad de líneas de código redundantes, y definitivamente no lo disfrutará.
Entonces, ¿qué hace en esta situación y cómo resuelve este problema sin utilizar una biblioteca de terceros o escribir líneas de código redundantes? De Swift Codable
viene el protocolo para nuestro rescate. No voy a explicarCodable
protocolo en este artículo. Supongo que está al tanto de cómo el protocolo Codable ha facilitado la tarea de serialización y deserialización de JSON en iOS. Junto con esto, también ha reducido los esfuerzos para almacenar estructuras en UserDefaults. Con esto, no es necesario utilizar ninguna biblioteca de terceros ni tener que escribir líneas de código redundantes.
Veamos cómo se puede hacer con un simple ejemplo:
Supongamos que tenemos una estructura para la información de nuestro usuario que se completa después de una llamada de red. Ahora, queremos almacenar todo este modelo en UserDefaults. Para hacerlo, primero haga que su estructura se ajuste al protocolo Codable, así:
struct UserDetails: Codable { var name: String var emailId: String var phone: String }
Ahora, después de recibir los datos de la llamada a la API, para guardarlos, solo tiene que codificar su estructura usando JSONEncoder, lo que le dará una instancia de datos que se puede guardar en los valores predeterminados de usuario, así:
If let encodedUserDetails = try? JSONEncoder().encode (self.UserDetails) { UserDefaults.standard.set(encodedUserDetails, forKey: “UserPersonalDetails”) }
Ahora, cuando desee acceder a esta información en cualquier lugar de la aplicación, debe recuperar la información escribiéndola en Data from UserDefaults y decodificándola usando JSONDecoder en su estructura, así:
If let decodedData = UserDefaults.standard.object(forKey: “UserPersonalDetails”) as? Data { if let userDetails = try? JSONDecoder().decode(UserDetails.self, from: decodedData) { print(userDetails) } }
Y eso es. Con estas pocas líneas de código, puede almacenar toda la estructura en UserDefaults y también puede recuperarla cuando sea necesario. También garantiza la seguridad de la información personal de su usuario, ya que Apple sugiere almacenar dicha información en UserDefaults.
Espero que solucione tu problema. No dude en dejar un comentario si tiene alguna pregunta.
Gracias por leer.
Añadir comentario