Sobes.tech
Junior

Ako ukladať a čítať dátové štruktúry pomocou User Defaults?

sobes.tech AI

Odpoveď od AI

User Defaults uklada iba obmedzený súbor typov: Data, String, Number, Date, Array, Dictionary. Pre uloženie vlastných dátových štruktúr je potrebné ich zakódovať do Data a dekódovať späť.

Používa sa protokol Codable (kombinácia Encodable a Decodable).

  1. Definícia štruktúry: Štruktúra musí zodpovedať protokolu Codable.

    struct MyData: Codable {
        let id: Int
        let name: String
        let isActive: Bool
    }
    
  2. Uloženie: Kódovanie štruktúry do Data pomocou JSONEncoder a uloženie do User Defaults.

    let myStruct = MyData(id: 1, name: "Example", isActive: true)
    
    // Kódovanie do Data
    let encoder = JSONEncoder()
    if let encodedData = try? encoder.encode(myStruct) {
        // Uloženie Data pod kľúčom
        UserDefaults.standard.set(encodedData, forKey: "myCustomData")
    } else {
        // Spracovanie chyby kódovania
        print("Failed to encode struct")
    }
    
  3. Čítanie: Čítanie Data z User Defaults a dekódovanie späť do štruktúry pomocou JSONDecoder.

    // Získanie Data podľa kľúča
    if let savedData = UserDefaults.standard.data(forKey: "myCustomData") {
        // Dekódovanie Data späť do štruktúry
        let decoder = JSONDecoder()
        if let loadedStruct = try? decoder.decode(MyData.self, from: savedData) {
            // Používame načítanú štruktúru
            print("Loaded struct: \(loadedStruct)")
        } else {
            // Spracovanie chyby pri dekódovaní
            print("Failed to decode data")
        }
    } else {
        // Dáta pre kľúč neboli nájdené
        print("No data found for key")
    }
    

Kľúčové body:

  • User Defaults nie je určený na ukladanie veľkých objemov dát alebo dôverných informácií.
  • Použitie Codable a JSONEncoder/JSONDecoder je štandardný spôsob ukladania vlastných typov do Data.
  • Je potrebné používať try? a spracovávať potenciálne chyby kódovania/dekódovania.
  • Na ukladanie polí štruktúr sa tiež používa Codable.
// Príklad ukladania poľa štruktúr
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")
}

// Príklad načítania poľa štruktúr
if let savedArrayData = UserDefaults.standard.data(forKey: "myCustomArray") {
    let decoder = JSONDecoder()
    if let loadedArray = try? decoder.decode([MyData].self, from: savedArrayData) {
        print("Loaded array: \(loadedArray)")
    }
}