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.