Sobes.tech
Junior

Дар бораи рамзгузорӣ ва шифркунии маълумот дар UserDefaults гап зан.

sobes.tech AI

Ҷавоб аз AI

UserDefaults маълумотҳоро дар формати калид-арзиш нигоҳ медорад. Барои намудҳои маълумоти фармоишӣ, ки мустақиман дастгирӣ намешаванд (String, Int, Bool, Data, Array, Dictionary), кодгузорӣ/декодгузорӣ лозим аст. Протоколи Codable истифода мешавад, ки Encodable ва Decodable-ро якҷоя мекунад.

Масали кодгузории намудҳои фармоишӣ:

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

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

Бо ёрии PropertyListEncoder ва PropertyListDecoder метавон объектҳои Codable-ро ба Data кодгузорӣ/декодгузорӣ кард барои нигоҳдорӣ дар UserDefaults.

Кодгузорӣ:

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

Декодгузорӣ:

if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
    let decoder = PropertyListDecoder()
    if let loadedUser = try? decoder.decode(User.self, from: savedData) {
        print("Користи боркашӣ: \(loadedUser.name), синну соли: \(loadedUser.age)")
    }
}

Роҳи дигар (камтар тавсия дода мешавад барои лоиҳаҳои нав): истифодаи NSCoding бо мерос аз NSObject.

Мувофиқати усулҳо:

Усул Протокол/Класс Дастгирии намудҳои арзишӣ/референсӣ Методи зарурӣ Осонӣ
Codable Codable (Encodable, Decodable) Арзиш ва Референс Иҷрои автоматӣ агар шароит иҷро шавад Баланд
NSCoding NSCoding Референс (зеро NSObject талаб мекунад) init(coder:), encode(with:) Миёна

Codable усули муосир ва тавсияшуда аст, ки бо осонии истифода ва синтези автоматӣ маъруф аст. NSCoding метавонад барои дастгирии коди кӯҳна зарур шавад.