我正在尝试使用枚举对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
。
答案 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