作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含多个案例的枚举,我正在使用这些案例进行计算,用户可以根据自己的喜好设置一个案例。他们当然需要能够更改该偏好,所以我想在表格 View 中显示这些,以便他们可以看到所有这些并选择他们想要设置为他们的偏好。
enum Calculation: Int {
case Calculation1
case Calculation2
case Calculation3
case Calculation4
case Calculation5
case Calculation6
case NoChoice // this exist only for the little trick in the refresh() method for which I need to know the number of cases
// This static method is from http://stackoverflow.com/questions/27094878/how-do-i-get-the-count-of-a-swift-enum/32063267#32063267
static let count: Int = {
var max: Int = 0
while let _ = Calculation(rawValue: max) { max += 1 }
return max
}()
static var selectedChoice: String {
get {
let userDefaults = NSUserDefaults.standardUserDefaults().objectForKey("selectedCalculation")
if let returnValue = userDefaults!.objectForKey("selectedCalculation") as? String {
return returnValue // if one exists, return it
} else {
return "Calculation1" // if not, return this default value
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "selectedCalculation")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
}
问题是枚举没有 indexPath,所以我无法遍历它并获取那些案例名称:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("formulaCell", forIndexPath: indexPath)
// Configure the cell...
let currentFormula = Calculation[indexPath.row] <- Error: Type 'Calculation.Type' has no subscript members
cell.textLabel?.text = currentFormula
return cell
}
我能想到的最好办法是创建一个包含这些案例的数组并使用它来创建单元格:
let Calculation = [Calculation1, Calculation2, Calculation3 ...etc]
虽然有效,但显然是一个丑陋的 hack。
有更好的方法吗?
最佳答案
在您的枚举上使用 switch 语句来处理为每个案例创建单元格。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("formulaCell", forIndexPath: indexPath)
let calculation = Calculation(rawValue: indexPath.row + 1) //Start at 1 and add one.
switch calculation {
case .Calculation1:
//Configure cell for case 1
case .Calculation2
//Configure cell for case 2 etc...
default:
}
return cell
}
关于swift - 如何使用 cellForRowAtIndexPath 中的枚举来填充 tableView 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37278557/
我是一名优秀的程序员,十分优秀!