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 эски кодду колдоо үчүн талап кылынышы мүмкүн.