Sobes.tech
Back to questions
Junior — Middle
66

Чем отличаются между собой классы StateObject и ObservableObject в контексте управления состоянием?

Companies where asked
iviivi

Answer from AI

sobes.tech AI

В SwiftUI ObservableObject и StateObject связаны с управлением состоянием, но выполняют разные роли:

  • ObservableObject — это протокол, который должен реализовать класс, чтобы его изменения могли отслеживаться в SwiftUI. Класс, соответствующий этому протоколу, публикует изменения через свойство @Published.

  • StateObject — это свойство-обертка, которая используется в представлениях для создания и хранения экземпляра класса, соответствующего ObservableObject. Она гарантирует, что объект будет создан один раз и сохранится при обновлениях View.

Пример:

class ViewModel: ObservableObject {
    @Published var count = 0
}

struct ContentView: View {
    @StateObject private var viewModel = ViewModel()

    var body: some View {
        VStack {
            Text("Count: \(viewModel.count)")
            Button("Increment") {
                viewModel.count += 1
            }
        }
    }
}

Здесь ViewModel — класс с состоянием, а @StateObject в ContentView отвечает за его создание и хранение.