Sobes.tech
Junior — Middle

Peut-on se passer de l'utilisation de StateObject dans certains scénarios?

sobes.tech IA

Réponse de l'IA

Oui, dans certains scénarios, il est possible de se passer de @StateObject.

@StateObject est conçu pour créer et stocker un objet ObservableObject à l’intérieur d’une vue, afin qu’il persiste lors des reconstructions. Si l’objet est créé et géré en dehors de la vue (par exemple, dans un composant parent ou via l’injection de dépendances), les vues enfants peuvent utiliser @ObservedObject ou @EnvironmentObject pour accéder à cet objet sans avoir à le recréer.

Exemple:

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("Valeur: \(model.value)")
    }
}

Ici, @StateObject est utilisé uniquement dans la vue parent, et la vue enfant obtient la référence via @ObservedObject. Ainsi, si l’objet est créé en dehors de la vue ou passé depuis le haut, @StateObject n’est pas obligatoire.