Sobes.tech
Junior

Pasakok apie duomenų kodavimą ir dekodavimą UserDefaults.

sobes.tech AI

Atsakymas iš AI

UserDefaults saugo duomenis kaip raktas-reikšmė poros. Tiesiogiai nepalaikomų naudotojo duomenų tipų (String, Int, Bool, Data, Array, Dictionary) kodavimas/dekodavimas yra reikalingas. Tai atliekama naudojant Codable protokolą, kuris jungia Encodable ir Decodable.

Pavyzdys naudotojo tipo kodavimui:

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

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

Naudojant PropertyListEncoder ir PropertyListDecoder, galima koduoti/dekoduoti Codable objektus į Data formatą, skirtą saugoti UserDefaults.

Kodavimas:

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

Dekodavimas:

if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
    let decoder = PropertyListDecoder()
    if let loadedUser = try? decoder.decode(User.self, from: savedData) {
        print("Įkeltas naudotojas: \(loadedUser.name), amžius: \(loadedUser.age)")
    }
}

Alternatyvus būdas (mažiau rekomenduojamas naujiems projektams): naudoti NSCoding su paveldėjimu iš NSObject.

Metodų palyginimas:

Metodas Protokolas/Klasė Vertės/nuorodos tipų palaikymas Reikalingi metodai Paprastumas
Codable Codable (Encodable, Decodable) Vertės ir nuorodos Automatinė įgyvendinimas pagal sąlygas Aukštas
NSCoding NSCoding Nuoroda (reikalauja NSObject) init(coder:), encode(with:) Vidutinis

Codable yra modernus ir rekomenduojamas požiūris dėl paprastumo ir automatinio generavimo. NSCoding gali būti reikalingas senesniam kodui palaikyti.