Je crée une application pour un projet scolaire où j'essaie de calculer le poids d'une personne sur différentes planètes. Le fichier ContentView fonctionne correctement dans l'aperçu, mais n'affiche que NavigationBar.title dans le simulateur / iPhone. Voici le code
import Foundation import SwiftUI struct Planet : Identifiable { var id = UUID() var name: String var g : Float var imageName : String { return name } } #if DEBUG let testData = [ Planet(name: "Mercury", g: 3.724), Planet(name: "Venus", g: 8.918), Planet(name: "Earth", g: 9.8), Planet(name: "Mars", g: 3.724), Planet(name: "Jupiter", g: 22.932), Planet(name: "Saturn", g: 9.114), Planet(name: "Uranus", g: 9.016), Planet(name: "Neptune", g: 10.976) ] #endif
edit- fichier swift appelé Planet
import SwiftUI struct ContentView : View { var planets: [Planet] = [] var body: some View { NavigationView { List(planets) { planet in PlanetCell(planet: planet) } .navigationBarTitle(Text("Sun")) } } } #if DEBUG struct ContentView_Previews : PreviewProvider { static var previews: some View { ContentView(planets: testData) } } #endif struct PlanetCell : View { let planet : Planet var body: some View { return NavigationLink(destination: PlanetDetail(planet: planet)){ Text(planet.name) } } }
3 Réponses :
Passez-vous une liste non vide ( planètes
) à votre ContentView
lorsque vous l'initialisez?
Je ne sais pas si c'est ce que vous voulez dire ContentView (planets: testData)
, si oui, alors j'ai dans le code ci-dessus. Si non, pourriez-vous montrer comment le faire car je suis assez nouveau dans la programmation iOS.
Le code à l'intérieur de ContentView_Previews
est utilisé pour l'aperçu Xcode. C'est pourquoi votre aperçu Xcode fonctionne. Cependant, pour le simulateur (ou l'appareil), ce code n'est pas utilisé. Pouvez-vous nous montrer où vous utilisez votre objet ContentView
? Dans le SceneDelegate
peut-être?
Attendez, je ne savais pas que nous devions utiliser l'objet ContentView
. J'ai appris swiftUI à partir de quelques tutoriels et ils fonctionnent tous sans avoir à écrire du code dans SceneDelegate
. J'ai créé un fichier dans lequel les données s'affichent lorsque l'utilisateur clique sur une cellule. Désolé si cette question est stupide - comment créer un objet ContentView
.
Je vous encourage à suivre les tutoriels Apple en la matière. Consultez Listes de création et navigation , il devrait répondre à vos besoins.
En fait, votre code est correct et fait ce qu'il est censé faire, votre testData
est disponible en mode débogage uniquement (aperçu). C'est pourquoi vous ne le voyez pas dans un appareil réel ou un simulateur, afin de voir une donnée réelle, vous devez remplir votre tableau de données planètes
dans votre fichier ContentView
afin qu'il devrait contenir des planètes tout comme votre testData
. Vous devez modifier votre ContentView
comme suit:
import SwiftUI struct ContentView : View { var planets: [Planet] = [ Planet(name: "Mercury", g: 3.724), Planet(name: "Venus", g: 8.918), Planet(name: "Earth", g: 9.8), Planet(name: "Mars", g: 3.724), Planet(name: "Jupiter", g: 22.932), Planet(name: "Saturn", g: 9.114), Planet(name: "Uranus", g: 9.016), Planet(name: "Neptune", g: 10.976) ] var body: some View { NavigationView { List(planets) { planet in PlanetCell(planet: planet) } .navigationBarTitle(Text("Sun")) } } } #if DEBUG struct ContentView_Previews : PreviewProvider { static var previews: some View { ContentView(planets: testData) } } #endif struct PlanetCell : View { let planet : Planet var body: some View { return NavigationLink(destination: PlanetDetail(planet: planet)){ Text(planet.name) } } }
Je vous recommande de voir comment vous pouvez utiliser ObservableObject
et State code > pour lier l'interface utilisateur avec vos modifications de modèle, vous pouvez consulter ce tutoriel: SwiftUI par exemple a >
Dans ContentView, changez
var planets: [Planet] = testData
en
var planets: [Planet] = []
voyez-vous une liste SwiftUI vide (vue tableau)? ou pas de vue de la table du tout? pouvez-vous poster une capture d'écran du simulateur?
@ F.Jihad imgur.com/gallery/7MV1EsB
Comme je m'y attendais, votre code est correct et affiche l'interface utilisateur, mais votre tableau de données est vide, c'est pourquoi il ne remplit aucune donnée. Vous avez 0 planète dans votre tableau de planètes
J'ai créé une structure appelée Planet, qui contient des données (qui sont affichées dans l'aperçu). Pouvez-vous montrer comment je peux résoudre ce problème?
vos exemples de données sont enveloppés dans la fermeture
#if DEBUG
, donc cela ne fonctionnera qu'en aperçu