Menu
Coddy logo textTech

Objets observables

Fait partie de la section Introduction à SwiftUI du Journey Swift de Coddy. Leçon 40 sur 50.

Les données que plusieurs vues partagent, ou qui possèdent leur propre logique, vont dans une classe. Elle se conforme à ObservableObject, et chaque propriété affichée à l’écran est marquée @Published :

class Cart: ObservableObject {
    @Published var count = 0

    func add() {
        count += 1
    }
}

La vue qui crée l’objet le stocke avec @StateObject. SwiftUI maintient cet objet en vie tant que la vue est affichée à l’écran et redessine la vue chaque fois qu’une propriété publiée change :

struct ContentView: View {
    @StateObject private var cart = Cart()

    var body: some View {
        VStack {
            Text("Items: \(cart.count)")
            Button("Add to cart") {
                cart.add()
            }
        }
    }
}

Une vue enfant qui reçoit un objet existant de sa vue parente le marque plutôt avec @ObservedObject : elle observe l’objet, mais n’en est pas propriétaire.

challenge icon

Défi

Moyen

La classe Scoreboard n’est pas connectée à l’écran. Fais-en un ObservableObject avec un @Published points, stocke-le dans ContentView avec @StateObject, et fais en sorte que le bouton appelle scoreboard.score(). Le texte doit afficher Points: 10 après un appui.

Essayez vous-même

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Introduction à SwiftUI

Entraînez-vous par vous-même : Playground Swift