Junior
52
questionbank

Расскажи о кодировании и декодировании данных в UserDefaults.

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

UserDefaults хранит данные в формате пар ключ-значение. Для пользовательских типов данных, не поддерживаемых напрямую (String, Int, Bool, Data, Array, Dictionary), требуется кодирование/декодирование. Используется протокол Codable, который объединяет Encodable и Decodable.

Пример кодирования пользовательского типа:

swift

С помощью PropertyListEncoder и PropertyListDecoder можно кодировать/декодировать объекты Codable в Data для хранения в UserDefaults.

Кодирование:

swift

Декодирование:

swift

Альтернативный способ (менее предпочтительный для новых проектов): использование NSCoding с наследованием от NSObject.

Сравнение методов:

МетодПротокол/КлассПоддержка Value/Reference TypesТребуемые методыПростота
CodableCodable (Encodable, Decodable)Value & ReferenceАвтоматическая реализация при соблюдении условийВысокая
NSCodingNSCodingReference (требует NSObject)init(coder:), encode(with:)Средняя

Codable является современным и рекомендуемым подходом благодаря простоте использования и автоматической синтезируемости. NSCoding может требоваться для поддержки старого кода.