Sobes.tech
Junior

Cum să salvezi și să citești structuri de date folosind User Defaults?

sobes.tech AI

Răspuns de la AI

User Defaults stochează doar un set limitat de tipuri: Data, String, Number, Date, Array, Dictionary. Pentru stocarea structurilor de date personalizate, acestea trebuie codificate în Data și decodificate înapoi.

Protocolul utilizat este Codable (o combinație de Encodable și Decodable).

  1. Definirea structurii: Structura trebuie să respecte protocolul Codable.

    struct MyData: Codable {
        let id: Int
        let name: String
        let isActive: Bool
    }
    
  2. Salvare: Codificarea structurii în Data folosind JSONEncoder și salvarea în User Defaults.

    let myStruct = MyData(id: 1, name: "Example", isActive: true)
    
    // Codificare în Data
    let encoder = JSONEncoder()
    if let encodedData = try? encoder.encode(myStruct) {
        // Salvare Data cu cheia
        UserDefaults.standard.set(encodedData, forKey: "myCustomData")
    } else {
        // Tratarea erorii de codificare
        print("Eșec la codificarea structurii")
    }
    
  3. Citire: Citirea Data din User Defaults și decodificarea înapoi în structură cu JSONDecoder.

    // Obținerea Data după cheie
    if let savedData = UserDefaults.standard.data(forKey: "myCustomData") {
        // Decodificarea Data în structură
        let decoder = JSONDecoder()
        if let loadedStruct = try? decoder.decode(MyData.self, from: savedData) {
            // Utilizarea structurii încărcate
            print("Structură încărcată: \(loadedStruct)")
        } else {
            // Tratarea erorii de decodare
            print("Eșec la decodarea datelor")
        }
    } else {
        // Nu s-au găsit date
        print("Nu s-au găsit date pentru cheie")
    }
    

Puncte cheie:

  • User Defaults nu este destinat pentru stocarea de volume mari de date sau informații confidențiale.
  • Utilizarea Codable și JSONEncoder/JSONDecoder este metoda standard pentru salvarea tipurilor personalizate în Data.
  • Trebuie folosit try? și gestionate eventualele erori de codificare/decodare.
  • Pentru stocarea array-urilor de structuri, se utilizează de asemenea Codable.
// Exemplu de salvare a unui array de structuri
let dataArray: [MyData] = [
    MyData(id: 1, name: "A", isActive: true),
    MyData(id: 2, name: "B", isActive: false)
]

let encoder = JSONEncoder()
if let encodedArrayData = try? encoder.encode(dataArray) {
    UserDefaults.standard.set(encodedArrayData, forKey: "myCustomArray")
}

// Exemplu de citire a unui array de structuri
if let savedArrayData = UserDefaults.standard.data(forKey: "myCustomArray") {
    let decoder = JSONDecoder()
    if let loadedArray = try? decoder.decode([MyData].self, from: savedArrayData) {
        print("Array încărcat: \(loadedArray)")
    }
}