Статьи

iOS | Свифт | Как сохранить пользовательские объекты в UserDefaults с помощью PropertyListEncoder/Decoder с…

Бывают случаи, когда нам нужно локально хранить только некоторые объекты и мы не хотим создавать базу данных sqlite/CoreData. Например, предположим, что мы разрабатываем приложение, и все данные извлекаются с сервера, и мы не сохраняем никаких данных, но нам нужно поддерживать пользовательский сеанс и, следовательно, хранить пользовательский объект, и мы просто хотим сохранить его в UserDefaults.

Итак, у нас есть структура User, реализующая протокол Codable. Codable подразумевает, что он реализует как протоколы Decodable, так и Encodable.

struct User: Codable {
  var id: String
  var firstName: String
  var lastName: String
  var email: String
}

Как следует из названий, реализуя Encodable и Decodable, вы даете своему классу возможность кодирования и декодирования во внешнее представление и из него, например JSON или список свойств.

И кто занимается этим кодированием или декодированием? Это будет кодировщик или декодер такого рода. например, JSONDecoder или PropertyListDecoder.

Читать:
Язык C

Создадим расширение класса UserDefaults:

я. Метод setCustomObject принимает общий параметр, который должен подтверждать протокол Encodable. Он создает экземпляр PropertyListEncoder, который кодирует объект и возвращает закодированные данные. А затем мы сохраняем эти данные в UserDefaults.

II. Метод customObject: forKey сначала получает значение сохраненных закодированных данных, вызывая data(forKey:key) для UserDefaults. Помните, эти данные были закодированы с помощью Encoder? Итак, теперь нам нужно будет декодировать эти данные с помощью PropertyListDecoder.

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

class SomeClass {
  func exampleSave() {
      let user = User(id: "123", firstName: "Alpha", lastName: "Beta", email: "[email protected]")
      try? UserDefaults.standard.setCustomObject(user, forKey: "YOUR_KEY")
  }
  func exampleGet() {
     let user: User? = try? UserDefaults.standard.customObject(forKey: "YOUR_KEY")
  }
}

Здесь следует отметить одну вещь.

let user: User? = UserDefaults.standard.customObject(type: User.self, forKey: “YOUR_KEY”)
user.firstName = "New name" //This alone will not update data
//You will have to re-save the whole object after modification
UserDefaults.standard.setCustomObject(user, forKey: "YOUR_KEY")

Похожие записи

Нейросеть GigaChat от Сбера: обзор, функции, как пользоваться

admin

Язык C

admin

Дополнительный! Дополнительный! Прочитать все об этом!

admin

Фантастические советы!

admin

Рекомендации по Node.js: кеширование и REST

admin

Добро пожаловать в MVVM-маршрутизатор с SwiftUI и Combine

admin