UserDefaults в Swift: как сохранять и читать простейшие данные?

UserDefaults представляет исключительно удобный способ для хранения небольших порций данных в вашем приложении. Вы можете использовать UserDefaults, чтобы сохранять пользовательские настройки, устанавливать некоторые переключатели или просто использовать в качестве компактного хранилища данных.

Что из себя представляет UserDefaults?

UserDefaults — это файл с расширением .plist в вашем приложении. Вы можете использовать данный класс для записи и чтения простых данных. Его структура аналогична структуре словаря, и пользовательские значения по умолчанию рассматриваются как хранилище пары ключ-значение.

var dict = [
    "name": "Dmitry",
    "language": "Russian",
    "occupation": "Carpenter"
]

Это словарь. Слева вы видите ключи, а справа значения. Когда вы хотите получить имя Dmitry, вы используете следующий синтаксис:

print(dict["name"])
// Dmitry

Если вы хотите изменить профессию Dmtiry:

dict["occupation"] = "Engineer"

Работа с классом UserDefaults аналогична работе со словарями.

Пользовательские настройки по умолчанию сохраняются в .plist файле, который представляет собой словарь, который отображается в формате строк и столбцов:

UserDefaults файл

Здесь мы видим структуру словаря: слева располагаются ключи, а справа значения. Самым распространенным .plist файлом в любом приложении является файл Info.plist, который содержит множество основных настроек вашего приложения, таких как его название или Bundle ID.

Изучив документацию по классу UserDefaults, вы увидите, что у него есть несколько очень важных функций:

  • init() — функция и свойство standard для инициализации пользовательских настроек по умолчанию.
  • object(forKey:), url(forKey:), string(forKey:), bool(forKey:) и т.д. используются для получения значений.
  • set(_:forKey:) используется для записи значений.
  • removeObject(forKey:) используется для удаления значений.

Сохранение данных в UserDefaults

Вы можете сохранить ряд простых типов данных в UserDefaults:

  • Int, Double, Float, Bool
  • String, Data, Date, URI
  • Array и Dictionary.

Прежде чем вы сможете сохранить какие-либо данные в UserDefaults, вам нужно получить ссылку на данный файл. В большинстве случаев вы будете работать со свойством standard:

UserDefaults.standard

Вы также можете создать свои собственные свойства для UserDefaults.

Если вы хотите что-то сохранить, используете следующий синтаксис:

let name = "Dmitry"
UserDefaults.standard.set(name, forKey: "name")

В приведенном выше примере вы назначаете переменную name ключу «name», создавая пару ключ-значение:

{
    "name": "Dmitry"
}

Если вы хотите удалить это значение из UserDefaults:

UserDefaults.standard.removeObject(forKey: "name")

Также вы также можете перезаписать любые данные:

UserDefaults.standard.set("Arthur", forKey: "name")

UserDefaults кэшируются в памяти iPhone и остаются там, когда ваше приложение работает. При этом они автоматически сохраняются на диске, поэтому нет необходимости каждый раз вручную сохранять эти данные.

Получение данных

Получение данных так же просто, как и их сохранение. Следующим образом вы можете получить значение, связанное с ключом «name»:

let name = UserDefaults.standard.string(forKey: "name")
print(name)
// Arthur

Когда ключ «name» не существует, приведенный выше код вернет nil. Поэтому иногда имеет смысл использовать опциональное связывание для безопасного получения значений:

if let name = UserDefaults.standard.string(forKey: "name") {
    print(name)
}

Вы также можете использовать оператор объединения по nil:

let name = UserDefaults.standard.string(forKey: "name") ?? "Unknown"

При сохранении UserDefaults, вы можете сэкономить некоторое время и сделать свой код более понятным, если вы назначите константу для свойства по умолчанию:

let defaults = UserDefaults.standard
let name = defaults.string(forKey: "name") ?? "Unknown"
let occupation = defaults.string(forKey: "occupation") ?? "Unknown"
let age = defaults.integer(forKey: "age") ?? 0

Функции, которые вы используете для получения значений из UserDefaults, могут возвращать значения с явным типом, таким как string (forKey :). Единственной функцией, которая может возвращать значения для любого типа, является data (forKey:), который будет возвращать значения с типом Any?.

Этими функциями могут быть url(forKey:), array(forKey:), dictionary(forKey:), string(forKey:), stringArray(forKey:) (тип [String]?), data(forKey:), bool(forKey:), integer(forKey:), float (forKey:) и double (forKey:).

Когда стоит использовать UserDefaults?

UserDefaults лучше всего использовать для хранения простых порций данных. Если вам нужно хранить несколько объектов одного типа, разумнее использовать реальную базу данных, например, CoreData или Realm. Проектирование базы данных является важным аспектом архитектуры вашего приложения.

Вариантами использования UserDefaults могут быть:

  • Информация о пользователе, такая как имя, адрес электронной почты, возраст или род занятий.
  • Настройки приложения, такие как язык интерфейса пользователя или цветовая тема приложения.
  • Различные переключатели.

Одним из самых распространенных способов использования UserDefaults являются переключатели. Это логические значения (true или false), которые указывают, произошло ли какое-либо событие или настройка. К примеру, это может быть:

  • Проверка, если пользователь выполнил вход в приложение.
  • Проверка, если пользователи обновил базу данных.
  • Проверка, была ли выполнена покупка в приложении или осуществлена подписка.
  • Проверка, если пользователь был одним из бета-тестеров вашего приложения и должен получить бесплатное обновление.

Вы также можете использовать переключатели для более сложных типов данных, таких как даты:

  • Проверка, когда пользователь последний раз обновлял приложение. Вы можете показать сообщение, чтобы обновить приложение до лучшей поддерживаемой версии.
  • Проверка, когда была дата последней облачной синхронизации, чтобы произвести синхронизацию, когда разрыв слишком большой.
  • Проверка, когда в последний раз у пользователя был запрошен отзыв о приложении.

Не используйте UserDefaults для хранения личных или конфиденциальных данных. Пользовательские настройки по умолчанию — это простой файл .plist в вашем приложении, поэтому эти данные можно легко вывести и изменить. Храните пароли, UUID, данные IAP и даже данные с высокими показателями конфиденциальности в связке ключей iOS.

Читайте также:
Комментарии (1)
  1. Отличная статья, _очень_ просто, понятно, аккуратно! Спасибо за материал

Добавить комментарий

Ваш адрес email не будет опубликован.