Sobes.tech
Назад к вопросам
Junior — Middle
72

Какие отличия существуют между использованием аннотации @State для переменной и аннотацией @ObservedObject в SwiftUI?

Компании, где спрашивали
Doubletapp

Ответ от нейросети

sobes.tech AI

@State используется для локального состояния внутри одного View. Переменная с @State хранится и управляется самим View, и при её изменении View перерисовывается. Это подходит для простых значений, которые не нужно передавать между разными View.

@ObservedObject применяется для отслеживания объектов, которые соответствуют протоколу ObservableObject и могут содержать несколько свойств с @Published. Изменения в этих свойствах вызывают обновление всех View, которые наблюдают этот объект. Это удобно для разделения состояния между несколькими View.

Пример:

class UserSettings: ObservableObject {
    @Published var score = 0
}

struct ContentView: View {
    @State private var localCounter = 0
    @ObservedObject var settings = UserSettings()

    var body: some View {
        VStack {
            Text("Local: \(localCounter)")
            Button("Increment Local") { localCounter += 1 }

            Text("Score: \(settings.score)")
            Button("Increment Score") { settings.score += 1 }
        }
    }
}

Здесь localCounter — локальное состояние View, а settings — объект, который может использоваться и в других View.