Vertel over het coderen en decoderen van gegevens in UserDefaults.
sobes.tech AI
Antwoord van AI
UserDefaults slaat gegevens op in een sleutel-waarde formaat. Voor aangepaste datatypes die niet direct ondersteund worden (String, Int, Bool, Data, Array, Dictionary), is codering/decodering nodig. Er wordt gebruik gemaakt van het Codable protocol, dat Encodable en Decodable combineert.
Voorbeeld van codering van een aangepast type:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
Met PropertyListEncoder en PropertyListDecoder kunnen Codable objecten gecodeerd/gedecodeerd worden naar Data voor opslag in UserDefaults.
Codering:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Decodering:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Gelezen gebruiker: \(loadedUser.name), leeftijd: \(loadedUser.age)")
}
}
Alternatief (minder aanbevolen voor nieuwe projecten): gebruik van NSCoding met overerving van NSObject.
Vergelijking van methoden:
| Methode | Protocol/Klasse | Ondersteuning voor Value/Reference Types | Vereiste methoden | Gemak |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Value & Reference | Automatische implementatie indien voorwaarden voldaan | Hoog |
NSCoding |
NSCoding |
Reference (vereist NSObject) |
init(coder:), encode(with:) |
Gemiddeld |
Codable is de moderne en aanbevolen aanpak vanwege het gebruiksgemak en automatische synthese. NSCoding kan nodig zijn voor ondersteuning van oudere code.