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

如何从数组的所有结构体中调用参数?附DataService.swift示例

如何从DataService的结构体数组中调用参数?

嘿,我来帮你搞定这个问题!你已经在DataService类里用单例模式创建了私有结构体数组bicepWorkouts,要访问数组里每个Workout结构体的参数,其实只需要两步就能轻松实现:

1. 给DataService添加公开的访问方法

因为你把bicepWorkouts声明成了private,外部代码没法直接访问这个数组,所以得在DataService里补全一个公开方法来返回它(或者按需返回单个元素):

方法一:返回全部训练数组

class DataService {
    static let instance = DataService()
    
    private let bicepWorkouts = [
        Workout(title: "Bicep Machine", imageName: "gloves.png", timeLength: "2:43", videoCode: "_kAlQ5Bh5aY", level: "Beginner", type: "Strength", likes: "5 Likes"),
        Workout(title: "Bicep Curl", imageName: "sixplates.png", timeLength: "1:44", videoCode: "_kAlQ5Bh5aY", level: "Beginner", type: "Strength", likes: "5 Likes")
    ]
    
    // 新增这个公开方法,让外部能拿到训练数组
    func getBicepWorkouts() -> [Workout] {
        return bicepWorkouts
    }
}

方法二:返回单个训练(可选)

如果需要根据索引获取特定训练,可以再加个方法避免越界崩溃:

func getWorkout(at index: Int) -> Workout? {
    guard index >= 0 && index < bicepWorkouts.count else {
        return nil
    }
    return bicepWorkouts[index]
}

2. 在外部代码中调用参数

现在你就可以在其他地方通过DataService的单例实例,调用上面的方法获取训练,然后直接访问结构体的参数了:

遍历所有训练并访问参数

// 获取DataService的单例实例
let dataService = DataService.instance
// 获取全部二头肌训练数据
let allBicepWorkouts = dataService.getBicepWorkouts()

// 遍历每个训练,逐个访问参数
for workout in allBicepWorkouts {
    print("训练名称:\(workout.title)")
    print("训练时长:\(workout.timeLength)")
    print("训练难度:\(workout.level)")
    print("训练类型:\(workout.type)")
    // imageName、videoCode、likes这些参数都可以用同样方式访问
}

获取单个训练并访问参数

if let firstWorkout = dataService.getWorkout(at: 0) {
    print("第一个训练的图片名:\(firstWorkout.imageName)")
    print("第一个训练的视频码:\(firstWorkout.videoCode)")
}

小提示:如果你的Workout结构体是定义在DataService内部的,外部访问时要写成DataService.Workout;如果是在DataService外面定义的,直接用Workout就行啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:15:09