Sobes.tech
Junior — Middle

Como garantir a preservação de um objeto de classe no UserDefaults?

sobes.tech IA

Resposta da IA

Para guardar um objeto de classe no UserDefaults no iOS, é necessário converter o objeto para um formato que o UserDefaults possa armazenar, como Data. Normalmente, a classe deve conformar-se ao protocolo Codable (ou NSCoding para uma abordagem mais antiga). Depois, o objeto é codificado em Data usando JSONEncoder ou PropertyListEncoder e guardado no UserDefaults. Ao ler, os dados são decodificados de volta para um objeto.

Exemplo com Codable:

class User: Codable {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

// Guardar
let user = User(name: "Иван", age: 30)
if let encoded = try? JSONEncoder().encode(user) {
    UserDefaults.standard.set(encoded, forKey: "savedUser")
}

// Carregar
if let savedUserData = UserDefaults.standard.data(forKey: "savedUser"),
   let savedUser = try? JSONDecoder().decode(User.self, from: savedUserData) {
    print(savedUser.name) // Иван
}

Dessa forma, o UserDefaults armazena dados serializados, não o objeto em si.