Junior
User Defaults kullanarak veri yapıları nasıl kaydedilir ve okunur?
sobes.tech yapay zeka
AI'dan gelen yanıt
User Defaults sadece sınırlı bir türler kümesini saklar: Data, String, Number, Date, Array, Dictionary. Özel veri yapılarını saklamak için bunları Data'ya kodlamalı ve tekrar çözmelisiniz.
Kullanılan protokol Codable'dır (hem Encodable hem de Decodable kombinasyonu).
-
Yapı tanımı: Yapı
Codableprotokolüne uygun olmalıdır.struct MyData: Codable { let id: Int let name: String let isActive: Bool } -
Kaydetme: Yapıyı
JSONEncoderkullanarakData'ya kodlayın ve User Defaults'a kaydedin.let myStruct = MyData(id: 1, name: "Example", isActive: true) // Data'ya kodlama let encoder = JSONEncoder() if let encodedData = try? encoder.encode(myStruct) { // Anahtar ile Data kaydet UserDefaults.standard.set(encodedData, forKey: "myCustomData") } else { // Kodlama hatası işlemi print("Yapı kodlanamadı") } -
Okuma: User Defaults'tan
Data'yı okuyun veJSONDecoderkullanarak tekrar yapıya çözün.// Anahtar ile Data alın if let savedData = UserDefaults.standard.data(forKey: "myCustomData") { // Data'yı yapıya çöz let decoder = JSONDecoder() if let loadedStruct = try? decoder.decode(MyData.self, from: savedData) { // Yüklenen yapıyı kullan print("Yüklenen yapı: \(loadedStruct)") } else { // Çözme hatası işlemi print("Data çözülemedi") } } else { // Veri bulunamadı print("Anahtar için veri bulunamadı") }
Anahtar noktalar:
- User Defaults büyük veri veya gizli bilgi saklamak için tasarlanmamıştır.
CodableveJSONEncoder/JSONDecoderkullanımı, özel tipleriData'ya kaydetmenin standart yoludur.- Potansiyel kodlama/çözme hatalarını
try?kullanarak ele alın. - Yapıların dizilerini kaydetmek için de
Codablekullanılır.
// Yapı dizisi kaydetme örneği
let dataArray: [MyData] = [
MyData(id: 1, name: "A", isActive: true),
MyData(id: 2, name: "B", isActive: false)
]
let encoder = JSONEncoder()
if let encodedArrayData = try? encoder.encode(dataArray) {
UserDefaults.standard.set(encodedArrayData, forKey: "myCustomArray")
}
// Yapı dizisi okuma örneği
if let savedArrayData = UserDefaults.standard.data(forKey: "myCustomArray") {
let decoder = JSONDecoder()
if let loadedArray = try? decoder.decode([MyData].self, from: savedArrayData) {
print("Yüklenmiş dizi: \(loadedArray)")
}
}