Sobes.tech
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.