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