Сохранение и получение кодируемых данных в UserDefaults в iOS Swift: подробное руководство

При разработке iOS UserDefaults – это широко используемый механизм для сохранения небольших объемов данных, таких как пользовательские настройки и настройки. Однако UserDefaults имеет ограничения при хранении сложных структур данных, таких как объекты Codable. В этой статье мы рассмотрим различные методы сохранения и получения данных Codable в UserDefaults с помощью Swift.

Методы сохранения Codable в UserDefaults:
Метод 1: кодирование и декодирование JSON
Один из подходов — закодировать объект Codable в данные JSON, а затем сохранить его как строку в UserDefaults. Вот пример:

// Encoding the Codable object to JSON data
let encoder = JSONEncoder()
if let encodedData = try? encoder.encode(myCodableObject) {
    // Saving the JSON data as a string in UserDefaults
    UserDefaults.standard.set(String(data: encodedData, encoding: .utf8), forKey: "myCodableObjectKey")
}

Метод 2: кодирование и декодирование списка свойств
Другой вариант — использовать PropertyListEncoder и PropertyListDecoder для кодирования и декодирования объекта Codable в формат списка свойств. Вот пример:

// Encoding the Codable object to property list data
let encoder = PropertyListEncoder()
if let encodedData = try? encoder.encode(myCodableObject) {
    // Saving the property list data in UserDefaults
    UserDefaults.standard.set(encodedData, forKey: "myCodableObjectKey")
}

Метод 3: Архивирование и разархивирование
Вы также можете использовать NSKeyedArchiver и NSKeyedUnarchiver для архивации и разархивирования объекта Codable. Вот пример:

// Archiving the Codable object
if let archivedData = try? NSKeyedArchiver.archivedData(withRootObject: myCodableObject, requiringSecureCoding: false) {
    // Saving the archived data in UserDefaults
    UserDefaults.standard.set(archivedData, forKey: "myCodableObjectKey")
}

Методы получения Codable из UserDefaults:
Метод 1: декодирование JSON
Чтобы получить объект Codable из UserDefaults, вам необходимо декодировать его из сохраненных данных JSON. Вот пример:

// Fetching the JSON string from UserDefaults
if let jsonString = UserDefaults.standard.string(forKey: "myCodableObjectKey") {
    // Decoding the JSON string into Codable object
    let decoder = JSONDecoder()
    if let decodedData = jsonString.data(using: .utf8),
       let decodedObject = try? decoder.decode(MyCodableObject.self, from: decodedData) {
        // Use the decoded object
    }
}

Метод 2: декодирование списка свойств
Если вы сохранили объект Codable с помощью PropertyListEncoder, вы можете получить его с помощью PropertyListDecoder. Вот пример:

// Fetching the property list data from UserDefaults
if let encodedData = UserDefaults.standard.data(forKey: "myCodableObjectKey") {
    // Decoding the property list data into Codable object
    let decoder = PropertyListDecoder()
    if let decodedObject = try? decoder.decode(MyCodableObject.self, from: encodedData) {
        // Use the decoded object
    }
}

Метод 3: Разархивировать
Для объектов Codable, сохраненных с помощью NSKeyedArchiver, вы можете разархивировать их с помощью NSKeyedUnarchiver. Вот пример:

// Fetching the archived data from UserDefaults
if let archivedData = UserDefaults.standard.data(forKey: "myCodableObjectKey") {
    // Unarchiving the data into Codable object
    if let decodedObject = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(archivedData) as? MyCodableObject {
        // Use the decoded object
    }
}

В этой статье мы рассмотрели различные методы сохранения и получения данных Codable в UserDefaults в iOS Swift. Используя методы кодирования/декодирования JSON, кодирования/декодирования списков свойств и архивирования/разархивирования, вы можете эффективно сохранять и извлекать сложные структуры данных в UserDefaults. Не забудьте выбрать подходящий метод в зависимости от ваших требований и характера объекта Codable, с которым вы работаете.