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).
-
Definirea structurii: Structura trebuie să respecte protocolul
Codable.struct MyData: Codable { let id: Int let name: String let isActive: Bool } -
Salvare: Codificarea structurii în
DatafolosindJSONEncoderș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") } -
Citire: Citirea
Datadin User Defaults și decodificarea înapoi în structură cuJSONDecoder.// 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șiJSONEncoder/JSONDecodereste metoda standard pentru salvarea tipurilor personalizate înData. - 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)")
}
}