Sobes.tech
Junior — Middle

Czy można obejść się bez użycia StateObject w niektórych scenariuszach?

sobes.tech AI

Odpowiedź od AI

Tak, w niektórych scenariuszach można obejść się bez użycia @StateObject.

@StateObject służy do tworzenia i przechowywania obiektu ObservableObject wewnątrz widoku, aby przetrwał podczas odświeżeń. Jeśli obiekt jest tworzony i zarządzany poza widokiem (np. w komponencie nadrzędnym lub przez wstrzykiwanie zależności), podległe widoki mogą używać @ObservedObject lub @EnvironmentObject do dostępu do tego obiektu bez konieczności tworzenia go na nowo.

Przykład:

class Model: ObservableObject {
    @Published var value = 0
}

struct ParentView: View {
    @StateObject private var model = Model()

    var body: some View {
        ChildView(model: model)
    }
}

struct ChildView: View {
    @ObservedObject var model: Model

    var body: some View {
        Text("Wartość: \(model.value)")
    }
}

Tutaj @StateObject jest używany tylko w widoku nadrzędnym, a widok podrzędny uzyskuje odwołanie przez @ObservedObject. W ten sposób, jeśli obiekt jest tworzony poza widokiem lub przekazywany z góry, @StateObject nie jest obowiązkowy.