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).
-
Structuurdefinitie: De structuur moet voldoen aan het
Codable-protocol.struct MyData: Codable { let id: Int let name: String let isActive: Bool } -
Opslaan: Codeer de structuur naar
DatametJSONEncoderen 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") } -
Lezen: Lees
Datauit User Defaults en decodeer deze terug naar de structuur metJSONDecoder.// 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
CodableenJSONEncoder/JSONDecoderis de standaardmethode voor het opslaan van aangepaste types inData. - Gebruik
try?en handel potentiële fouten bij codering/decodering af. - Voor het opslaan van arrays van structuren wordt ook
Codablegebruikt.
// 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)")
}
}