Μίλησε για την κωδικοποίηση και αποκωδικοποίηση δεδομένων στο UserDefaults.
sobes.tech AI
Απάντηση από AI
Το UserDefaults αποθηκεύει δεδομένα σε μορφή κλειδιού-τιμής. Για προσαρμοσμένους τύπους δεδομένων που δεν υποστηρίζονται άμεσα (String, Int, Bool, Data, Array, Dictionary), απαιτείται κωδικοποίηση/αποκωδικοποίηση. Χρησιμοποιείται το πρωτόκολλο Codable, που συνδυάζει το Encodable και το Decodable.
Παράδειγμα κωδικοποίησης ενός προσαρμοσμένου τύπου:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
Με PropertyListEncoder και PropertyListDecoder μπορούν να κωδικοποιηθούν/αποκωδικοποιηθούν αντικείμενα Codable σε Data για αποθήκευση στο UserDefaults.
Κωδικοποίηση:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Αποκωδικοποίηση:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Φόρτωση χρήστη: \(loadedUser.name), ηλικία: \(loadedUser.age)")
}
}
Εναλλακτικός τρόπος (λιγότερο προτεινόμενος για νέα έργα): χρήση NSCoding με κληρονομικότητα από NSObject.
Σύγκριση μεθόδων:
| Μέθοδος | Πρωτόκολλο/Κλάση | Υποστήριξη για Τύπους Αξίας/Αναφοράς | Απαιτούμενες μέθοδοι | Ευκολία |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Αξία & Αναφορά | Αυτόματη υλοποίηση αν πληρούνται οι προϋποθέσεις | Υψηλή |
NSCoding |
NSCoding |
Αναφορά (απαιτεί NSObject) |
init(coder:), encode(with:) |
Μέτρια |
Το Codable είναι η σύγχρονη και συστηνόμενη προσέγγιση λόγω της ευκολίας χρήσης και της αυτόματης σύνθεσης. Το NSCoding μπορεί να απαιτείται για την υποστήριξη παλαιού κώδικα.