我目前正在构建一个应用程序来自学 Swift,所以我仍然很新。我遇到了一个问题。该应用程序是一个时间表创建者。我有多达十二个科目,每个科目都有分数。然后将这些点分布在几天内。我有一个代码概念,可以使用循环很好地分配点,但想知道是否有一些东西可以减少代码量,而不是我目前拥有的,每个主题都是这样的:
subject1.monpts = 20
subject1.tuepts = 20
subject1.wedpts = 20
subject1.thurpts = 20
subject1.fripts = 20
subject1.satpts = 20
subject1.sunpts = 20
这个,x12,是很多代码。但我需要它,以便每个科目都可以选择一周中每一天的分数(然后应用程序将根据这些分数分配时间)。为了打印时间表,我将每个 subjectX.daypts 放在一起,但这意味着我每天要写出 12 个主题。
我还只需要在变量实际上有值的情况下显示一些内容。我计划使用 if 语句来做到这一点,但这意味着为每个变量编写一个语句,目前是 12 x 7 = 48!例如。 (忽略格式 - 仅用于概念)
if subjects1.monpts = 0 {
subjects1monLabel = isHidden.false
// or just a print / don't print statement
}
我觉得我好像缺少一种更简单的方法来做到这一点!
下面的图片更好地解释了这个概念:
最佳答案
如果您想保存有关这些字段的信息,您可以拥有一个包含枚举键和整数值的字典,如下所示:
enum WeekDay: CaseIterable {
case monday, tuesday, wednesday, thursday, friday, saturday, sunday
}
struct Subject {
var pointsForWeekDay: [WeekDay: Int]
}
现在你可以这样做:
var pointsForWeekDay = Dictionary(uniqueKeysWithValues:
WeekDay.allCases.map { weekDay in
return (weekDay, 20)
}
)
var subject = Subject(pointsForWeekDay: pointsForWeekDay)
CaseIterable
允许您访问枚举的所有值。
Map
获取每个 weekDay 并使用您的 Int 值创建一个元组数组。
最后,您可以将其组合起来,形成一个完整的 Dictionary
和 uniqueKeysWithValues
初始值设定项,该初始值设定项采用生成的元组数组。
关于swift - 如何减少 Swift 中处理变量和 if 语句的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59095752/