我试图用直接用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对象除了默认值之外没有设置的值。如果我在运行时在实际视图中为我的属性调用ContentView_Previews. generateMockData(),它可以正常工作。
发布于 2022-02-07 20:21:41
有时,我似乎需要创建一个我所说的中间视图来使事情正常工作。像这样有用吗?
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()
}
}https://stackoverflow.com/questions/71024422
复制相似问题