Sobes.tech
Junior — Middle

Каква е разликата между класовете StateObject и ObservableObject в контекста на управление на състоянието?

sobes.tech AI

Отговор от AI

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

  • ObservableObject: това е протокол, който трябва да реализира клас, за да могат неговите промени да бъдат проследявани в SwiftUI. Класът, който отговаря на този протокол, публикува промени чрез свойството @Published.

  • StateObject: това е свойство-обвивка, която се използва във изгледи за създаване и съхраняване на екземпляр на клас, който отговаря на ObservableObject. Тя гарантира, че обектът ще бъде създаден само веднъж и ще се запази при актуализации на изгледа.

Пример:

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 отговаря за неговото създаване и съхранение.