如何在Swift中将多个值与枚举相关联?

时间:2016-10-27 01:02:16

标签: ios swift uitableview enums swift3

我正在尝试使用枚举对UITableView中的各个部分进行分类。

以下是部分 enum的当前实施:

enum Section: Int, CustomStringConvertible {

    case open = 0
    case closed = 1

    var description: String {
        switch self {
        case .open:
            return "Open"
        case .closed:
            return "Closed"
        }
    }
}

以下是我使用它来命名UITableView部分中标题的标题:

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return Section(rawValue: section)?.description
}

我只是想知道是否有更好的方法来实现这一点。也许有元组。我不太确定,但我很想知道是否有更好的解决方案。

这只是一个用例,给出的两个案例只是为了简洁起见。我想使用多个值,例如与给定UIColors相关联的case

3 个答案:

答案 0 :(得分:2)

如果您要做的就是设置数字和字符串之间的对应关系:

0 -> Open
1 -> Closed

...然后很难看到枚举的用途。你想要的是一个字典,其中数字是键,甚至只是一个简单的数组

let arr = ["Open", "Closed"]

在数组中,字符串由数字索引:

return arr[rawValue: section]

答案 1 :(得分:0)

如果您要使用枚举为标题提供其他信息(例如背景颜色或其他),您可以像对描述一样向枚举添加更多变量。

但是如果你只使用标题标题,你可能更适合使用数组:

let sectionTitles = ["Open", "Closed"] //var if the section can change.

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return sectionTitles[section]
}

答案 2 :(得分:0)

假设您要为此枚举添加更多变量或功能,您的语法就可以了。在命名这样的案例时,你可以巩固一点:

case open, closed, thirdCase, fourthCase

如果您的枚举具有Int的rawValue,并且案例从0开始并且数字递增,则您不必分配值。

如果您希望增量以不同于0的数字开头,您可以这样设置:

case open = 3, closed, thirdCase, fourthCase

您的案例的rawValues为3,4,5,6