首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI ContentView_Previews不运行函数

SwiftUI ContentView_Previews不运行函数
EN

Stack Overflow用户
提问于 2022-02-07 19:40:10
回答 1查看 101关注 0票数 0

我试图用直接用ContentView_Previews编写的方法为我的Xcode预览生成一些模拟数据,但我没有成功,我也不明白为什么。

代码语言:javascript
复制
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对象除了默认值之外没有设置的值。如果我在运行时在实际视图中为我的属性调用ContentView_Previews. generateMockData(),它可以正常工作。

EN

回答 1

Stack Overflow用户

发布于 2022-02-07 20:21:41

有时,我似乎需要创建一个我所说的中间视图来使事情正常工作。像这样有用吗?

代码语言:javascript
复制
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)
    }
}

然后预览提供程序变成:

代码语言:javascript
复制
struct ContentView_Previews: PreviewProvider {
    
    static var previews: some View {
        MainViewIntermediary()
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71024422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档