Sobes.tech
Junior

Pastāsti par datu kodēšanu un dekodēšanu UserDefaults.

sobes.tech AI

Atbilde no AI

UserDefaults glabā datus kā atslēgas-vērtības pāri. Tieši neatbalstītu lietotāja datu tipu (String, Int, Bool, Data, Array, Dictionary) kodēšana/dekodēšana ir nepieciešama. To veic, izmantojot Codable protokolu, kas apvieno Encodable un Decodable.

Piemērs lietotāja tipa kodēšanai:

struct User: Codable {
    let name: String
    let age: Int
}

let user = User(name: "Иван", age: 30)

Ar PropertyListEncoder un PropertyListDecoder var kodēt/dekodēt Codable objektus uz Data formātu, lai tos saglabātu UserDefaults.

Kodēšana:

let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
    UserDefaults.standard.set(encoded, forKey: "currentUser")
}

Dekodēšana:

if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
    let decoder = PropertyListDecoder()
    if let loadedUser = try? decoder.decode(User.self, from: savedData) {
        print("Ielādēts lietotājs: \(loadedUser.name), vecums: \(loadedUser.age)")
    }
}

Alternatīva metode (mazāk ieteicama jaunajiem projektiem): izmantot NSCoding ar mantošanu no NSObject.

Metožu salīdzinājums:

Metode Protokols/Klase Vertības/atsauces tipu atbalsts Nepieciešamās metodes Vienkāršība
Codable Codable (Encodable, Decodable) Vertes un atsauces tipi Automātiska īstenošana atbilstoši nosacījumiem Augsta
NSCoding NSCoding Atsauces (prasa NSObject) init(coder:), encode(with:) Vidēja

Codable ir mūsdienīgs un ieteicams pieejas veids, pateicoties vienkāršībai un automātiskai ģenerēšanai. NSCoding var būt nepieciešams vecāka koda atbalstam.