0Pricing
Swift Academy · Leçon

@ObservableObject et @StateObject

Créer des modèles de type référence qui pilotent les vues SwiftUI via @Published.

@ObservableObject et @StateObject est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Bienvenue

Pour un état complexe partagé entre plusieurs vues, utilisez des modèles de type référence conformes à `ObservableObject`, possédés par `@StateObject` ou observés par `@ObservedObject`.

Définir un ObservableObject

```swift class CartModel: ObservableObject { @Published var items: [CartItem] = [] @Published var total: Double = 0 func add(_ item: CartItem) { items.append(item) } } ```

@StateObject — Propriété du modèle

```swift struct ShopView: View { @StateObject private var cart = CartModel() // owns the model var body: some View { CartList(cart: cart) } } ``` Utilisez `@StateObject` lorsque la vue crée et possède le modèle.

@ObservedObject — Propriété externe

```swift struct CartList: View { @ObservedObject var cart: CartModel // doesn't own; passed in var body: some View { List(cart.items) { item in Text(item.name) } } } ```

La différence

• `@StateObject` — la vue crée le modèle ; celui-ci persiste lors des nouveaux rendus • `@ObservedObject` — le modèle est transmis à la vue ; le parent peut le recréer Utiliser `@ObservedObject` là où `@StateObject` est nécessaire entraîne une réinitialisation inattendue du modèle.

Abonnement à objectWillChange

SwiftUI s'abonne automatiquement à `objectWillChange` lorsque vous utilisez `@StateObject` ou `@ObservedObject`. Chaque changement de `@Published` déclenche un nouveau rendu.

objectWillChange manuel

```swift class Timer: ObservableObject { var count = 0 func tick() { objectWillChange.send() // manual notification count += 1 } } ```

ObservableObjects imbriqués

SwiftUI n'observe pas automatiquement les ObservableObjects imbriqués. Propagez les changements manuellement : ```swift class Parent: ObservableObject { @Published var child = ChildModel() private var cancel: AnyCancellable? init() { cancel = child.objectWillChange.sink { [weak self] _ in self?.objectWillChange.send() } } } ```

Macro @Observable (Swift 5.9)

```swift @Observable class Counter { var count = 0 } // No ObservableObject, no @Published, no @StateObject needed // SwiftUI automatically tracks access ```

Tester ObservableObject

```swift func testCart() { let cart = CartModel() cart.add(CartItem(name:"Apple",price:1.0)) XCTAssertEqual(cart.items.count, 1) XCTAssertEqual(cart.total, 1.0) } ```

Vérification rapide

Quand devez-vous utiliser `@StateObject` plutôt que `@ObservedObject` ?

Récapitulatif

Points essentiels : • `ObservableObject` + `@Published` = modèle réactif • `@StateObject` — la vue possède le modèle ; celui-ci persiste lors des nouveaux rendus • `@ObservedObject` — le modèle est transmis à la vue ; propriété externe • `objectWillChange.send()` pour les notifications manuelles • La macro `@Observable` de Swift 5.9 remplace la plupart de ces éléments Ensuite : @EnvironmentObject.

Questions Fréquemment Posées

La leçon « @ObservableObject et @StateObject » est-elle gratuite ?

Oui — le texte complet de « @ObservableObject et @StateObject » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « @ObservableObject et @StateObject » ?

Créer des modèles de type référence qui pilotent les vues SwiftUI via @Published. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « @ObservableObject et @StateObject » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. @Binding : flux de données bidirectionnel
  2. @ObservableObject et @StateObject
  3. @EnvironmentObject pour un état partagé
  4. Source unique de vérité et flux unidirectionnel
← Retour à Swift Academy