Fonctionnement de ObservableObject
helio
Membre
Bonjour à tous,
J'utilise désormais SwiftUI depuis le début de l'année et les évolutions de cette semaine me donnent encore plus envie de continuer. Cependant je note des problèmes.
J'ai le code suivant :
public class ProductFetcher : ObservableObject {
@Published var product = [Product]()
init() {
print("Init ProcductFetcher...")
}
}
Je n'ai pas de référence à la classe ProductFetcher dans la première vue ContentView.
Pourtant quand je lance l'application, j'ai ceci qui s'affiche :
Init ProcductFetcher...
Pourriez-vous m'aider à comprendre ? est-ce le comportement de ObservableObject qui implique ceci ?
Merci.
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il n'y a pas un @EnvironmentObject dans ton application ?
Non pas de @EnvironmentObject
Voici la vue qui utilise la classe :
Et ContentView :
C'est normal. Le TabView crée les vues HomeView() et ExplorerView() à l'initialisation, pour pouvoir passer de l'une à l'autre rapidement.
Même si ExplorerView() n'est pas affichée au démarrage de l'application, elle est quand même créé, ce qui provoque la création de la classe ProductFetcher.
Ce n'est pas le fonctionnement de @ObservableObject qui te posait problème, mais celui de TabView.
Pour vérifier cette hypothèse, j'ai tapé un petit programme de test.
Les deux vues sont bien créées au démarrage :
De base, j'aurais pensé que le TabView créait et détruisait les vues en fonction des besoins, mais non manifestement.
Merci Draken, je ne pensais pas que le TabView fonctionnait comme cela !
Moi non plus ! J’y ai pensé en regardant ton problème. Puis j’ai écris un petit test pour vérifier.