Приложение SwiftUI работает в режиме предварительного просмотра, но не в симуляторе - PullRequest
0 голосов
/ 12 октября 2019

Я делаю приложение для школьного проекта, в котором я пытаюсь рассчитать вес человека на разных планетах. Файл ContentView отлично работает в предварительном просмотре, но показывает только NavigationBar.title в симуляторе / iPhone. Вот код

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)
        }
    }
}

edit-swift файл с именем Planet

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


Ответы [ 2 ]

1 голос
/ 12 октября 2019

На самом деле ваш код в порядке и делает то, что предполагает, ваш 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 на примере

0 голосов
/ 12 октября 2019

Передаете ли вы непустой список (planets) своему ContentView при инициализации?

...