swift - 如何减少 Swift 中处理变量和 if 语句的代码?

标签 swift xcode variables swift5

我目前正在构建一个应用程序来自学 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
    }

我觉得我好像缺少一种更简单的方法来做到这一点!

下面的图片更好地解释了这个概念:

enter image description here

最佳答案

如果您想保存有关这些字段的信息,您可以拥有一个包含枚举键和整数值的字典,如下所示:

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 值创建一个元组数组。

最后,您可以将其组合起来,形成一个完整的 DictionaryuniqueKeysWithValues 初始值设定项,该初始值设定项采用生成的元组数组。

关于swift - 如何减少 Swift 中处理变量和 if 语句的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59095752/

相关文章:

ios - Sprite 套件缓动/暂停问题

c++ - 在 CMake 中隐藏 <project>_automoc 目标

ios - AVPlayer 视频不适合水平

ios - 如何在非 UIView 类的 uiView 之间切换

swift - 如何在String格式类方法中使用String对象

c - typedef 和变量名

variables - Makefile 中的括号 $() 和大括号 ${} 语法有什么区别?

ios - 带有 Objective-C 选择器 'Method()' 的方法 'Method' 与具有相同 Objective-C 选择器的 'Method' 的 getter 冲突

ios - 在GitHub项目中找不到-lPods的库

javascript - 标识符和变量之间的区别(在 JavaScript 中)