На самом деле ваш код в порядке и делает то, что предполагает, ваш testData
доступен только в режиме отладки (предварительный просмотр). Вот почему вы не видите его на реальном устройстве или в симуляторе, чтобы увидеть реальные данные, вам нужно заполнить массив данных planets
в вашем файле ContentView
, чтобы в нем было несколько планет, таких как testData
. Вам следует изменить ContentView
следующим образом:
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)
}
}
}
Я рекомендую вам посмотреть, как вы можете использовать ObservableObject
и State
, чтобы связать пользовательский интерфейс с изменениями модели, вы можете обратиться к этому руководству: SwiftUI на примере