You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HKWorkout.init()已废弃,如何创建测试用[HKWorkout]数据?

替代废弃的HKWorkout初始化,创建测试用HKWorkout数组的最佳方式

旧版HKWorkout.init()已被废弃,要在模拟器或Xcode Preview里快速创建测试用[HKWorkout]数组,完全不需要依赖HKHealthStore,有两种简单可行的方式:

1. 使用新版HKWorkout初始化器

新版初始化器去掉了冗余的duration参数(系统会通过start和end时间自动计算时长),写法和你之前的代码几乎一致,直接就能用:

// 创建单条测试Workout数据
let workoutStartDate = Date()
let duration: TimeInterval = 3600 // 1小时
let distance = 10000.0 // 10公里

let workout = HKWorkout(
    activityType: .running,
    start: workoutStartDate,
    end: workoutStartDate.addingTimeInterval(duration),
    workoutEvents: nil,
    totalEnergyBurned: HKQuantity(unit: .kilocalorie(), doubleValue: Double.random(in: 200...500)),
    totalDistance: HKQuantity(unit: .meter(), doubleValue: distance),
    metadata: nil
)

var workouts: [HKWorkout] = []
workouts.append(workout)

2. 封装工具方法批量生成测试数据

如果需要多条不同类型的测试数据,可以写个工具函数批量生成,省得重复写代码:

func generateDummyWorkouts(count: Int) -> [HKWorkout] {
    var workouts: [HKWorkout] = []
    let baseDate = Date()
    
    for i in 0..<count {
        // 按天生成不同日期的Workout
        let startDate = baseDate.addingTimeInterval(-TimeInterval(i) * 86400)
        // 随机时长(30分钟到2小时)
        let duration = TimeInterval.random(in: 1800...7200)
        // 随机卡路里和距离
        let calories = Double.random(in: 150...800)
        let distance = Double.random(in: 5000...15000)
        
        let workout = HKWorkout(
            activityType: [.running, .cycling, .swimming].randomElement()!,
            start: startDate,
            end: startDate.addingTimeInterval(duration),
            workoutEvents: nil,
            totalEnergyBurned: HKQuantity(unit: .kilocalorie(), doubleValue: calories),
            totalDistance: HKQuantity(unit: .meter(), doubleValue: distance),
            metadata: [HKWorkoutMetadataKey.deviceName: "Test Device"]
        )
        workouts.append(workout)
    }
    return workouts
}

// 调用示例:生成5条测试数据
let testWorkouts = generateDummyWorkouts(count: 5)

补充说明

  • 这两种方式都不需要HKHealthStore,直接在模拟器或Xcode Preview里就能运行,完全满足SwiftUI视图的测试需求。
  • 如果需要模拟暂停、恢复这类复杂运动事件,只需要给workoutEvents参数传入[HKWorkoutEvent]数组即可,基础UI测试用上面的简化写法就足够。

内容的提问来源于stack exchange,提问作者not link

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:53:10