Sobes.tech
Junior

Beszélj az adatok kódolásáról és dekódolásáról a UserDefaults-ben.

sobes.tech MI

Válasz az MI-től

A UserDefaults kulcs-érték formátumban tárol adatokat. A nem közvetlenül támogatott egyedi adattípusok (String, Int, Bool, Data, Array, Dictionary) esetén kódolás/dekódolás szükséges. A Codable protokollt használjuk, amely az Encodable és Decodable-t egyesíti.

Egy egyedi típus kódolásának példája:

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

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

A PropertyListEncoder és PropertyListDecoder segítségével Codable objektumokat lehet kódolni/dekódolni Data formátumba a UserDefaults-ban való tároláshoz.

Kódolás:

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

Dekódolás:

if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
    let decoder = PropertyListDecoder()
    if let loadedUser = try? decoder.decode(User.self, from: savedData) {
        print("Betöltött felhasználó: \(loadedUser.name), életkor: \(loadedUser.age)")
    }
}

Alternatív módszer (kevésbé ajánlott új projektekhez): az NSCoding használata és az öröklődés az NSObject-ből.

Módszerek összehasonlítása:

Módszer Protokoll/Típus Támogatás érték- és referencia típusokra Szükséges metódusok Egyszerűség
Codable Codable (Encodable, Decodable) Érték és referencia Automatikus megvalósítás feltételek esetén Magas
NSCoding NSCoding Referencia ( NSObject szükséges) init(coder:), encode(with:) Közepes

A Codable a modern és ajánlott megközelítés az egyszerűsége és az automatikus szintézis miatt. Az NSCoding akkor lehet szükséges, ha régi kód támogatására van szükség.