Вопрос проверяет понимание декоратора @State в SwiftUI, который используется для управления локальным состоянием внутри представления.
В SwiftUI @State — это property wrapper, предназначенный для хранения и наблюдения за изменением локального состояния внутри представления. Когда значение, обёрнутое в @State, меняется, SwiftUI автоматически вычисляет, какие части пользовательского интерфейса зависят от этого значения, и планирует их обновление. Это делает управление состоянием декларативным и простым для данных, которые полностью принадлежат одному представлению и не должны передаваться наружу.
SwiftUI хранит реальное значение @State в специальном управляемом хранилище, отдельно от экземпляра структуры представления. Поскольку представления в SwiftUI — это структуры (value types) и часто пересоздаются, @State гарантирует, что значение сохраняется между обновлениями интерфейса и остаётся единственным источником истины для этого конкретного представления. При изменении значения через его обёрнутую property (например, через $ для создания binding) SwiftUI помечает представление как нуждающееся в обновлении.
Рассмотрим простой счётчик:
import SwiftUI
struct CounterView: View {
@State private var count = 0
var body: some View {
VStack {
Text("Count: \(count)")
Button("Increment") {
count += 1
}
}
}
}Здесь count объявлен как @State private. При нажатии кнопки значение count увеличивается, и SwiftUI автоматически обновляет текст, отображающий текущее значение.
Вывод: Используйте @State для управления локальным, приватным состоянием внутри одного представления в SwiftUI; для разделяемого состояния между несколькими компонентами применяйте @ObservedObject или @EnvironmentObject.