Ответ
UserDefaults — это легковесное хранилище типа «ключ-значение» для сохранения небольших объемов данных (настроек, флагов, простых объектов).
Базовые операции:
-
Запись данных:
let defaults = UserDefaults.standard defaults.set("Алексей", forKey: "userName") defaults.set(42, forKey: "userScore") defaults.set(true, forKey: "isOnboardingCompleted") // Начиная с iOS 12, вызов `synchronize()` не требуется. -
Чтение данных:
let name = defaults.string(forKey: "userName") // String? let score = defaults.integer(forKey: "userScore") // Int let isCompleted = defaults.bool(forKey: "isOnboardingCompleted") // Bool
Работа с Codable-объектами:
Для сохранения пользовательских типов данных используйте JSONEncoder/JSONDecoder.
struct UserSettings: Codable {
var theme: String
var notificationsEnabled: Bool
}
let settings = UserSettings(theme: "dark", notificationsEnabled: true)
// Сохранение
if let encoded = try? JSONEncoder().encode(settings) {
defaults.set(encoded, forKey: "userSettings")
}
// Чтение
if let data = defaults.data(forKey: "userSettings"),
let decoded = try? JSONDecoder().decode(UserSettings.self, from: data) {
print(decoded.theme)
}
Важные ограничения и best practices:
- Не храните большие данные (изображения, модели) — для этого используйте FileManager, Core Data или Realm.
- Удаление:
defaults.removeObject(forKey: "userName") - Группы приложений: Для обмена данными между приложением и расширениями используйте
UserDefaults(suiteName: "group.com.your.app"). - Данные
UserDefaultsне шифруются и могут быть легко извлечены с устройства.