Ответ
UserDefaults — стандартный и рекомендуемый способ для хранения простых настроек пользователя (логические флаги, строки, числа, даты, небольшие массивы).
Преимущества:
- Простой API.
- Автоматически сохраняется между запусками приложения.
- Поддерживает синхронизацию через iCloud (с помощью
NSUbiquitousKeyValueStore).
Базовый пример:
// Сохранение настроек
UserDefaults.standard.set(true, forKey: "isDarkModeEnabled")
UserDefaults.standard.set("John", forKey: "userName")
// Чтение настроек
let isDarkMode = UserDefaults.standard.bool(forKey: "isDarkModeEnabled")
let name = UserDefaults.standard.string(forKey: "userName") ?? "Guest"
Для структурированных настроек используйте Codable:
struct AppSettings: Codable {
var theme: String
var notificationsEnabled: Bool
var refreshRate: Int
}
// Сохранение структуры
var settings = AppSettings(theme: "dark", notificationsEnabled: true, refreshRate: 30)
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(settings) {
UserDefaults.standard.set(encoded, forKey: "appSettings")
}
// Загрузка структуры
if let savedData = UserDefaults.standard.data(forKey: "appSettings") {
let decoder = JSONDecoder()
if let loadedSettings = try? decoder.decode(AppSettings.self, from: savedData) {
settings = loadedSettings
}
}
Когда НЕ использовать UserDefaults:
- Большие данные (изображения, большие массивы) — используйте файловую систему.
- Чувствительная информация (пароли, токены) — используйте Keychain.
- Сложные реляционные данные — используйте Core Data или другую базу данных.
Best Practice: Определите константы для ключей, чтобы избежать опечаток:
enum UserDefaultsKeys {
static let isDarkModeEnabled = "isDarkModeEnabled"
static let appSettings = "appSettings"
}