Junior
UserDefaults'ta veri kodlama ve kod çözme hakkında konuş.
sobes.tech yapay zeka
AI'dan gelen yanıt
UserDefaults, anahtar-değer formatında veri saklar. Doğrudan desteklenmeyen (String, Int, Bool, Data, Array, Dictionary) özel veri türleri için kodlama/çözme gerekir. Codable protokolü kullanılır ve bu, Encodable ve Decodable'yi birleştirir.
Özel bir türün kodlanması örneği:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
PropertyListEncoder ve PropertyListDecoder kullanılarak Codable nesneleri Data'ya kodlanabilir/çözülerek UserDefaults'a kaydedilebilir.
Kodlama:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Çözme:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Yüklenen kullanıcı: \(loadedUser.name), yaş: \(loadedUser.age)")
}
}
Alternatif (yeni projeler için daha az tercih edilen): NSCoding kullanımı ve NSObject'den kalıtım.
Yöntemlerin karşılaştırması:
| Yöntem | Protokol/Sınıf | Değer/Tamamlama Tipleri Desteği | Gerekli Metotlar | Kolaylık |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Değer ve Referans | Koşullara uygun otomatik uygulama | Yüksek |
NSCoding |
NSCoding |
Referans (NSObject gerektirir) |
init(coder:), encode(with:) |
Orta |
Codable, kullanım kolaylığı ve otomatik sentez nedeniyle modern ve önerilen yaklaşımdır. NSCoding, eski kodların desteği için gerekebilir.