如何从数组的所有结构体中调用参数?附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
相关产品推荐
相关产品推荐

