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

Swift中如何生成随机数量的类实例以构建随机训练计划

Hey,我来帮你搞定这个随机训练计划的需求,咱们一步步来实现:

1. 先定义训练动作的模型类

首先得有个类来封装每个训练动作的核心信息,比如名称和次数:

class WorkoutExercise {
    let name: String
    let reps: Int
    
    init(name: String, reps: Int) {
        self.name = name
        self.reps = reps
    }
}

这个类足够简洁,刚好满足存储动作信息的需求,后续如果要加更多属性(比如动作类型、休息时长)也能轻松扩展。

2. 生成随机数量的训练计划

接下来写个方法生成随机的训练动作数组。咱们先定好可选的动作名称数组,然后随机生成动作的数量(比如2到6个,你可以自己调整范围),再给每个动作分配随机次数:

func generateRandomWorkout() -> [WorkoutExercise] {
    // 指定可选的训练动作名称数组
    let availableExercises = ["俯卧撑", "500米划船", "深蹲", "平板支撑", "引体向上"]
    // 随机生成训练动作的数量(这里设置2到6个,可按需调整)
    let exerciseCount = Int.random(in: 2...6)
    
    var workoutPlan = [WorkoutExercise]()
    
    for _ in 0..<exerciseCount {
        // 随机选一个动作名称
        guard let randomName = availableExercises.randomElement() else { continue }
        // 临时随机次数,后续你可以根据动作类型设置专属上下限
        let randomReps = Int.random(in: 1...10)
        
        let exercise = WorkoutExercise(name: randomName, reps: randomReps)
        workoutPlan.append(exercise)
    }
    
    return workoutPlan
}

这里给你提个后续优化的思路:按动作类型设置次数上下限,可以做一个字典来映射动作和对应的次数范围,比如:

let exerciseRepRanges: [String: ClosedRange<Int>] = [
    "俯卧撑": 5...10,
    "500米划船": 1...1,
    "深蹲": 8...15,
    "平板支撑": 30...60 // 如果是计时类动作,你可以把reps改成Double或者单独加duration属性哦
]

然后生成次数的时候,就根据动作名称取对应的范围:

let repsRange = exerciseRepRanges[randomName] ?? 1...10 // 兜底的默认范围
let randomReps = Int.random(in: repsRange)
3. 通过Segue传递训练计划数组

假设你有一个生成计划的ViewController(比如WorkoutGeneratorVC),和一个展示计划的WorkoutDisplayVC,咱们在WorkoutGeneratorVC里生成好计划后,通过segue把数据传过去:

首先在WorkoutDisplayVC里定义一个接收数据的属性:

class WorkoutDisplayVC: UIViewController {
    var workoutPlan: [WorkoutExercise]!
    
    // 后续tableView相关代码...
}

然后在WorkoutGeneratorVC的prepare(for:sender:)方法里传递数据:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ShowWorkoutPlanSegue" {
        guard let destinationVC = segue.destination as? WorkoutDisplayVC else { return }
        // 调用之前写的方法生成训练计划
        let generatedWorkout = generateRandomWorkout()
        destinationVC.workoutPlan = generatedWorkout
    }
}
4. 在TableView中加载训练计划

最后在WorkoutDisplayVC里配置TableView,展示训练计划:

先把TableView的数据源和代理设置好(可以在storyboard里拖线,或者代码里手动设置),然后实现数据源方法:

extension WorkoutDisplayVC: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return workoutPlan.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "WorkoutCell", for: indexPath)
        let exercise = workoutPlan[indexPath.row]
        cell.textLabel?.text = exercise.name
        // 可以根据动作类型调整文案,比如划船显示"1 组",平板支撑显示"\(exercise.reps) 秒"
        cell.detailTextLabel?.text = "\(exercise.reps) 次" 
        return cell
    }
}

记得在storyboard里给TableViewCell设置好identifier(比如"WorkoutCell"),或者用代码注册cell哦。

这样一套流程下来,就能实现你要的随机训练计划生成、数据传递和TableView展示啦,后续你可以根据需求再调整细节,比如动作类型的区分、UI样式优化之类的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:10:01