Sobes.tech
Junior

Hoe sla je datastructuren op en lees je ze met User Defaults?

sobes.tech AI

Antwoord van AI

User Defaults slaat slechts een beperkte set typen op: Data, String, Number, Date, Array, Dictionary. Voor het opslaan van aangepaste datastructuren moeten deze worden gecodeerd naar Data en weer worden gedecodeerd.

Het protocol dat wordt gebruikt is Codable (een combinatie van Encodable en Decodable).

  1. Structuurdefinitie: De structuur moet voldoen aan het Codable-protocol.

    struct MyData: Codable {
        let id: Int
        let name: String
        let isActive: Bool
    }
    
  2. Opslaan: Codeer de structuur naar Data met JSONEncoder en sla deze op in User Defaults.

    let myStruct = MyData(id: 1, name: "Example", isActive: true)
    
    // Coderen naar Data
    let encoder = JSONEncoder()
    if let encodedData = try? encoder.encode(myStruct) {
        // Data opslaan met de sleutel
        UserDefaults.standard.set(encodedData, forKey: "myCustomData")
    } else {
        // Foutafhandeling codering
        print("Fout bij coderen van struct")
    }
    
  3. Lezen: Lees Data uit User Defaults en decodeer deze terug naar de structuur met JSONDecoder.

    // Data ophalen met sleutel
    if let savedData = UserDefaults.standard.data(forKey: "myCustomData") {
        // Decoderen naar structuur
        let decoder = JSONDecoder()
        if let loadedStruct = try? decoder.decode(MyData.self, from: savedData) {
            // Gebruik de geladen structuur
            print("Geladen struct: \(loadedStruct)")
        } else {
            // Fout bij decoderen
            print("Fout bij decoderen van data")
        }
    } else {
        // Geen data gevonden
        print("Geen data gevonden voor de sleutel")
    }
    

Belangrijke punten:

  • User Defaults is niet bedoeld voor het opslaan van grote hoeveelheden data of vertrouwelijke informatie.
  • Het gebruik van Codable en JSONEncoder/JSONDecoder is de standaardmethode voor het opslaan van aangepaste types in Data.
  • Gebruik try? en handel potentiële fouten bij codering/decodering af.
  • Voor het opslaan van arrays van structuren wordt ook Codable gebruikt.
// Voorbeeld van het opslaan van een array van structuren
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")
}

// Voorbeeld van het lezen van een array van structuren
if let savedArrayData = UserDefaults.standard.data(forKey: "myCustomArray") {
    let decoder = JSONDecoder()
    if let loadedArray = try? decoder.decode([MyData].self, from: savedArrayData) {
        print("Geladen array: \(loadedArray)")
    }
}