Вопрос проверяет знание процесса преобразования объектов в памяти в формат для хранения и обратного восстановления.
Структуру данных можно сохранить и прочитать с помощью процесса сериализации (кодирования) и десериализации (декодирования). В Swift для этого используют протокол Codable. Объект, подписанный под Codable, можно преобразовать в данные (например, JSON) с помощью JSONEncoder, а эти данные сохранить в файл через FileManager или в UserDefaults. Для чтения данные извлекаются и декодируются обратно в объект с помощью JSONDecoder.
Сериализация — это процесс преобразования объекта в поток байтов (данные). Десериализация — обратный процесс.
Основные шаги для структур, подписанных под Codable:
Определение модели:
struct User: Codable {
let name: String
let age: Int
}Кодирование (Сохранение):
let user = User(name: "Alice", age: 30)
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted // Для читаемости (опционально)
do {
// Преобразуем структуру в Data (бинарные данные JSON)
let userData = try encoder.encode(user)
// Сохраняем данные в UserDefaults
UserDefaults.standard.set(userData, forKey: "savedUser")
// Или сохраняем в файл с помощью FileManager
let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("user.json")
try userData.write(to: url)
} catch {
print("Ошибка кодирования: \(error)")
}Декодирование (Чтение):
// Чтение из UserDefaults
if let savedData = UserDefaults.standard.data(forKey: "savedUser") {
let decoder = JSONDecoder()
do {
let loadedUser = try decoder.decode(User.self, from: savedData)
print(loadedUser.name) // Alice
} catch {
print("Ошибка декодирования: \(error)")
}
}