簡體   English   中英

SwiftUI ContentView_Previews 未運行 function

[英]SwiftUI ContentView_Previews not running function

我正在嘗試使用直接在ContentView_Previews中編寫的方法為我在 Xcode 中的預覽生成一些模擬數據,但我沒有成功,我不明白為什么。

struct ContentView_Previews: PreviewProvider {
    static let healthManager = generateMockData()
    
    static var previews: some View {
        MainView().environmentObject(healthManager)
    }
    
    static func generateMockData() -> HealthManager {
        let defaultHealthManager = HealthManager()
        defaultHealthManager.gavePermissions = true
        
        for i in 1...10 {
            let defaultWorkout = HKWorkout(activityType: .traditionalStrengthTraining,
                                           start: .now - Double(i * 50),
                                           end: .now,
                                           duration: Double(i * 100),
                                           totalEnergyBurned: HKQuantity(unit: .largeCalorie(), doubleValue: Double(i * 100)),
                                           totalDistance: nil,
                                           device: nil,
                                           metadata: nil)
            
            defaultHealthManager.previousWorkouts.append(defaultWorkout)
        }
        
        
        return defaultHealthManager
    }
}

基本上它顯示defaultHealthManager object 除了默認值之外沒有設置任何值。 如果我調用ContentView_Previews. generateMockData() 在運行時的實際視圖中為我的屬性ContentView_Previews. generateMockData() ,它工作正常。

有時,我似乎需要創建我稱之為中間視圖的東西來讓事情正常進行。 這樣的東西有用嗎?

struct MainViewIntermediary: View {
    @State var healthManager: HealthManager

    init() {
        let defaultHealthManager = HealthManager()
        defaultHealthManager.gavePermissions = true
        
        for i in 1...10 {
            let defaultWorkout = HKWorkout(activityType: .traditionalStrengthTraining,
                                           start: .now - Double(i * 50),
                                           end: .now,
                                           duration: Double(i * 100),
                                           totalEnergyBurned: HKQuantity(unit: .largeCalorie(), doubleValue: Double(i * 100)),
                                           totalDistance: nil,
                                           device: nil,
                                           metadata: nil)
            
            defaultHealthManager.previousWorkouts.append(defaultWorkout)
            _healthManager = State(initialValue: defaultHealthManager)
        }
    }

   var body: some View {
        MainView().environmentObject(healthManager)
    }
}

然后你的預覽提供者變成:

struct ContentView_Previews: PreviewProvider {
    
    static var previews: some View {
        MainViewIntermediary()
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM