Sobes.tech
Junior

Rääkige andmete kodeerimisest ja dekodeerimisest UserDefaults'is.

sobes.tech AI

Vastus AI-lt

UserDefaults salvestab andmeid võtme-väärtuse paarina. Otse toetatavate kasutaja tüüpide (String, Int, Bool, Data, Array, Dictionary) jaoks on vaja kodeerida/dekodeerida. Seda tehakse Codable protokolli abil, mis ühendab Encodable ja Decodable.

Kasutajatüübi kodeerimise näide:

struct User: Codable {
    let name: String
    let age: Int
}

let user = User(name: "Иван", age: 30)

PropertyListEncoder ja PropertyListDecoder abil saab kodeerida/dekodeerida Codable objekte Data formaati, et neid salvestada UserDefaults.

Kodeerimine:

let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
    UserDefaults.standard.set(encoded, forKey: "currentUser")
}

Dekodeerimine:

if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
    let decoder = PropertyListDecoder()
    if let loadedUser = try? decoder.decode(User.self, from: savedData) {
        print("Laaditud kasutaja: \(loadedUser.name), vanus: \(loadedUser.age)")
    }
}

Alternatiivne viis (vähem soovitatav uutes projektides): kasutada NSCoding koos pärimisega NSObject-ist.

Meetodite võrdlus:

Meetod Protokoll/Klass Väärtuste/viite tüüpide tugi Nõutavad meetodid Lihtsus
Codable Codable (Encodable, Decodable) Väärtused ja viited Automaatne teostus tingimustel Kõrge
NSCoding NSCoding Viited (nõuab NSObject) init(coder:), encode(with:) Keskmine

Codable on kaasaegne ja soovitatav lähenemine, kuna see on lihtne kasutada ja automaatselt genereeritav. NSCoding võib olla vajalik vanema koodi toetamiseks.