Erzählen Sie von der Kodierung und Dekodierung von Daten in UserDefaults.
sobes.tech KI
Antwort von AI
UserDefaults speichert Daten im Schlüssel-Wert-Format. Für benutzerdefinierte Datentypen, die nicht direkt unterstützt werden (String, Int, Bool, Data, Array, Dictionary), sind Codierung/Decodierung erforderlich. Es wird das Codable-Protokoll verwendet, das Encodable und Decodable kombiniert.
Beispiel für die Codierung eines benutzerdefinierten Typs:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
Mit PropertyListEncoder und PropertyListDecoder können Codable-Objekte in Data codiert/decodiert werden, um sie in UserDefaults zu speichern.
Codierung:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Decodierung:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Geladener Benutzer: \(loadedUser.name), Alter: \(loadedUser.age)")
}
}
Alternativ (weniger empfehlenswert für neue Projekte): Verwendung von NSCoding mit Vererbung von NSObject.
Vergleich der Methoden:
| Methode | Protokoll/Klasse | Unterstützung für Value/Reference Types | Erforderliche Methoden | Einfachheit |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Value & Reference | Automatische Implementierung bei Erfüllung der Bedingungen | Hoch |
NSCoding |
NSCoding |
Reference (benötigt NSObject) |
init(coder:), encode(with:) |
Mittel |
Codable ist der moderne und empfohlene Ansatz aufgrund seiner Einfachheit und automatischen Synthese. NSCoding kann für die Unterstützung älteren Codes erforderlich sein.