UserDefaults-də məlumatların kodlaşdırılması və dekodlaşdırılması haqqında danış.
sobes.tech Süni İntellekt
AI-dan cavab
UserDefaults məlumatları açar-dəyər formatında saxlayır. Birbaşa dəstəklənməyən (String, Int, Bool, Data, Array, Dictionary) xüsusi məlumat tipləri üçün kodlaşdırma/dekodlaşdırma tələb olunur. Codable protokolu istifadə olunur və bu, Encodable və Decodable-ni birləşdirir.
Xüsusi tipin kodlaşdırılması nümunəsi:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
PropertyListEncoder və PropertyListDecoder vasitəsilə Codable obyektləri Data-ya kodlaşdırıb UserDefaults-da saxlamaq mümkündür.
Kodlaşdırma:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Dekodlaşdırma:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Yüklənmiş istifadəçi: \(loadedUser.name), yaş: \(loadedUser.age)")
}
}
Alternativ üsul (yeni layihələr üçün daha az tövsiyə olunur): NSCoding istifadə etmək və NSObject-dən irs almaq.
Yöntəmlərin müqayisəsi:
| Yöntəm | Protokol/Sinf | Dəstək verdiyi Tipler | Tələb olunan metodlar | Asanlıq |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Dəyər və Referans | Şərtlər ödənərsə avtomatik həyata keçirilməsi | Yüksək |
NSCoding |
NSCoding |
Referans ( NSObject tələb edir) |
init(coder:), encode(with:) |
Orta |
Codable müasir və tövsiyə olunan yanaşmadır, istifadəsi asandır və avtomatik sintez olunur. NSCoding köhnə kodların dəstəyi üçün lazım ola bilər.