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

  1. Yapı tanımı: Yapı Codable protokolüne uygun olmalıdır.

    struct MyData: Codable {
        let id: Int
        let name: String
        let isActive: Bool
    }
    
  2. Kaydetme: Yapıyı JSONEncoder kullanarak Data'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ı")
    }
    
  3. Okuma: User Defaults'tan Data'yı okuyun ve JSONDecoder kullanarak 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.
  • Codable ve JSONEncoder/JSONDecoder kullanımı, özel tipleri Data'ya kaydetmenin standart yoludur.
  • Potansiyel kodlama/çözme hatalarını try? kullanarak ele alın.
  • Yapıların dizilerini kaydetmek için de Codable kullanı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)")
    }
}