回到旧的Objective-C时代,我会经常使用枚举来处理具有常量内容,分段控件等的表格 - 在强制增量的整数列表从零开始的情况下。我还经常在末尾添加一个... count成员来计算这些条目,对表格部分有用。行。尝试使用快速枚举实现这一点很麻烦 - 很多转换为&从原始值和开关中的额外默认子句允许'count'条目。任何人都可以建议一种处理这种情况的优雅方法吗?
答案 0 :(得分:2)
Swift中仍然可以使用自动增量。
enum Section: Int {
case A = 0
case B
case C
}
Section.C.rawValue // -> 2
至于count
,您应该手动实施(How do I get the count of a Swift enum?):
enum Section: Int {
case A = 0
case B
case C
static let count = C.rawValue + 1
}
至于“与原始值和额外默认条款的转换”问题,请与enum
而不是rawValue
进行比较。
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return Section.count
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch Section(rawValue: section)! {
case .A: return 1
case .B: return 2
case .C: return 5
}
}
如果你想做array[Section.A]
之类的事情,你可以轻松实现它。
extension Array {
subscript(section: Section) -> T {
return self[section.rawValue]
}
}
extension NSIndexPath {
convenience init(forRow row: Int, inSection section: Section) {
self.init(forRow: row, inSection: section.rawValue)
}
}
let array = ["foo", "bar", "baz"]
array[.B] // -> "bar"
let indexPath = NSIndexPath(forRow: 20, inSection: .C)
indexPath.section // -> 2
indexPath.row // -> 20
等等...... :)
答案 1 :(得分:0)
为每个枚举添加一个“count”函数。例如
static func count() -> Int { return 3 }
整数 - >枚举转换由init方法完成。