UserDefaults — это легковесное key-value хранилище данных, предоставляемое iOS SDK. Это система сохранения простых типов данных между запусками приложения.
// Базовый пример использования
let defaults = UserDefaults.standard
defaults.set(42, forKey: "userAge")
let age = defaults.integer(forKey: "userAge")
Хранение настроек пользователя:
defaults.set(true, forKey: "darkModeEnabled")
Кэширование простых данных:
defaults.set(lastUpdateDate, forKey: "lastCacheUpdate")
Хранение состояния приложения:
defaults.set(false, forKey: "onboardingShown")
Флаги функциональности:
defaults.set("v2", forKey: "activeFeatureSet")
Тип данных | Метод записи | Метод чтения |
---|---|---|
Int | .set(42, forKey:) | .integer(forKey:) |
Double | .set(3.14, forKey:) | .double(forKey:) |
Bool | .set(true, forKey:) | .bool(forKey:) |
String | .set("text", forKey:) | .string(forKey:) |
Data | .set(data, forKey:) | .data(forKey:) |
Array | .set([1,2], forKey:) | .array(forKey:) |
Dictionary | .set(["k":"v"], forKey:) | .dictionary(forKey:) |
URL | .set(url, forKey:) | .url(forKey:) |
Синхронизация:
defaults.synchronize() // Явная синхронизация (не требуется в современных версиях iOS)
Suite Names (для App Groups):
let sharedDefaults = UserDefaults(suiteName: "group.com.yourapp")!
Наблюдение за изменениями:
NotificationCenter.default.addObserver(
forName: UserDefaults.didChangeNotification,
object: nil,
queue: nil) { _ in
// Реакция на изменения
}
Не используйте для:
Лучшие практики:
enum DefaultsKeys {
static let userToken = "userToken"
}
defaults.removeObject(forKey: "oldKey")
if defaults.object(forKey: "someKey") != nil {
// Значение существует
}
@propertyWrapper
struct UserDefault<T> {
let key: String
let defaultValue: T
var wrappedValue: T {
get {
UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
// Использование
@UserDefault(key: "darkModeEnabled", defaultValue: false)
static var isDarkModeEnabled: Bool
UserDefaults — идеальное решение для хранения простых пользовательских предпочтений и легковесных данных приложения.