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.
Défi
MoyenLa 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()
}
}
}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
4Modificateurs
Marge intérieureArrière-plansOrdre des modificateursCadres et formesRécapitulatif - Créateur de badges2Afficher du contenu
Vues de texteNombres dans le textePolicesCouleursSymboles SFRécapitulatif - Étiquette de prix5État et boutons
BoutonsLa propriété @StateÉtat vrai ou fauxVues conditionnellesRécapitulatif - Compteur de score3Piles et mise en page
VStackHStackAlignement et espacementSpacer et ZStackRécapitulatif - Carte météo6Saisie utilisateur
Champ de texteInterrupteurSteppeur et curseurSélecteurRécapitulatif - Formulaire de commande9Partager des données
La propriété @BindingObjets observablesObjets d’environnementRécapitulatif - Compteur de pasEntraînez-vous par vous-même : Playground Swift