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).
-
Definícia štruktúry: Štruktúra musí zodpovedať protokolu
Codable.struct MyData: Codable { let id: Int let name: String let isActive: Bool } -
Uloženie: Kódovanie štruktúry do
DatapomocouJSONEncodera 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") } -
Čítanie: Čítanie
Dataz User Defaults a dekódovanie späť do štruktúry pomocouJSONDecoder.// 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
CodableaJSONEncoder/JSONDecoderje štandardný spôsob ukladania vlastných typov doData. - 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)")
}
}