@SceneStorage
Это property wrapper (обертка свойства), который позволяет сохранять и восстанавливать небольшие объемы данных, связанных с конкретной сценой (Scene) в SwiftUI. Данные автоматически сохраняются и восстанавливаются системой, даже если приложение было закрыто или свернуто.
Основные особенности:
— Данные сохраняются системой и восстанавливаются при повторном открытии сцены.
— Данные связаны с конкретной сценой (например, вкладкой в приложении с несколькими окнами).
— Предназначен для хранения небольших объемов данных (например, настроек или состояния интерфейса).
— Поддерживает простые типы, такие как String, Int, Double, Bool, URL, Data и т.д.
Синтаксис
"key": Уникальный ключ, по которому данные сохраняются и восстанавливаются.
defaultValue: Значение по умолчанию, если данные по ключу отсутствуют.
Примеры использования
Сохранение текста в текстовом поле:
Сохранение состояния переключателя:
Сохранение выбранной вкладки:
Когда использовать?
— Для сохранения состояния интерфейса (например, выбранной вкладки, раскрытого состояния списка).
— Для хранения пользовательских настроек, специфичных для конкретной сцены.
— Когда нужно, чтобы данные автоматически сохранялись и восстанавливались системой.
Ограничения:
— Объем данных: Не предназначен для хранения больших объемов данных. Для этого лучше использовать @AppStorage или другие механизмы (Core Data, UserDefaults).
— Типы данных: Поддерживает только простые типы данных. Для сложных данных потребуется сериализация (например, в Data).
Сравнение с @AppStorage
@SceneStorage: Данные привязаны к конкретной сцене. Подходит для хранения состояния интерфейса.
@AppStorage: Данные сохраняются на уровне всего приложения. Подходит для хранения глобальных настроек.
Пример
Советы:
— Используйте уникальные ключи для каждого свойства, чтобы избежать конфликтов.
— Не храните чувствительные данные (пароли, токены) в @SceneStorage, так как они не шифруются.
— Для сложных данных используйте сериализацию (например, в Data с помощью Codable).
Это property wrapper (обертка свойства), который позволяет сохранять и восстанавливать небольшие объемы данных, связанных с конкретной сценой (Scene) в SwiftUI. Данные автоматически сохраняются и восстанавливаются системой, даже если приложение было закрыто или свернуто.
Основные особенности:
— Данные сохраняются системой и восстанавливаются при повторном открытии сцены.
— Данные связаны с конкретной сценой (например, вкладкой в приложении с несколькими окнами).
— Предназначен для хранения небольших объемов данных (например, настроек или состояния интерфейса).
— Поддерживает простые типы, такие как String, Int, Double, Bool, URL, Data и т.д.
Синтаксис
@SceneStorage("key") var propertyName: PropertyType = defaultValue"key": Уникальный ключ, по которому данные сохраняются и восстанавливаются.
defaultValue: Значение по умолчанию, если данные по ключу отсутствуют.
Примеры использования
Сохранение текста в текстовом поле:
struct ContentView: View {
@SceneStorage("textInput") private var text: String = ""
var body: some View {
TextField("Введите текст", text: $text)
.padding()
}
}Сохранение состояния переключателя:
struct ToggleView: View {
@SceneStorage("isToggleOn") private var isToggleOn: Bool = false
var body: some View {
Toggle("Включить", isOn: $isToggleOn)
.padding()
}
}Сохранение выбранной вкладки:
struct TabViewExample: View {
@SceneStorage("selectedTab") private var selectedTab: Int = 0
var body: some View {
TabView(selection: $selectedTab) {
Text("Вкладка 1").tabItem { Text("Вкладка 1") }.tag(0)
Text("Вкладка 2").tabItem { Text("Вкладка 2") }.tag(1)
}
}
}Когда использовать?
— Для сохранения состояния интерфейса (например, выбранной вкладки, раскрытого состояния списка).
— Для хранения пользовательских настроек, специфичных для конкретной сцены.
— Когда нужно, чтобы данные автоматически сохранялись и восстанавливались системой.
Ограничения:
— Объем данных: Не предназначен для хранения больших объемов данных. Для этого лучше использовать @AppStorage или другие механизмы (Core Data, UserDefaults).
— Типы данных: Поддерживает только простые типы данных. Для сложных данных потребуется сериализация (например, в Data).
Сравнение с @AppStorage
@SceneStorage: Данные привязаны к конкретной сцене. Подходит для хранения состояния интерфейса.
@AppStorage: Данные сохраняются на уровне всего приложения. Подходит для хранения глобальных настроек.
Пример
struct SettingsView: View {
@SceneStorage("lastOpenedTab") private var lastOpenedTab: Int = 0
@AppStorage("isDarkModeEnabled") private var isDarkModeEnabled: Bool = false
var body: some View {
VStack {
Text("Последняя вкладка: \(lastOpenedTab)")
Toggle("Темный режим", isOn: $isDarkModeEnabled)
}
.padding()
}
}Советы:
— Используйте уникальные ключи для каждого свойства, чтобы избежать конфликтов.
— Не храните чувствительные данные (пароли, токены) в @SceneStorage, так как они не шифруются.
— Для сложных данных используйте сериализацию (например, в Data с помощью Codable).