我有枚举:
enum VAXSettingsCells : Int
{
case SwitchModeCell = 0
case SwitcherCell = 1
case NewProgramCell = 2
case CreatedProgramCell = 3
}
我在UITableView
委托中使用的:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cellID = VAXSettingsCells(rawValue: indexPath.row)
switch cellID {
case .SwitchModeCell:
let cell = theTableView.dequeueReusableCellWithIdentifier(VAXSettingsSwitchModeCell.reusableCellIdentifier()) as! VAXSettingsSwitchModeCell
cell.delegate = self
return cell
但是我收到了一些错误:
Enum case 'SwitchModeCell' not found in type 'VAXSettingsViewController.VAXSettingsCells?'
如何摆脱这个错误?实际上我可以使用原始值来获取int并且它可以工作但我想使用枚举数据,因为我不想使用默认的switch开关。
答案 0 :(得分:3)
首先需要打开VAXSettingsCells返回可选值。
如果使用原始值类型定义枚举,则枚举会自动接收一个初始值设定项,该初始值设定项接受原始值类型的值(作为名为rawValue的参数)并返回枚举大小写或nil 强>
if let cellID = VAXSettingsCells(rawValue: indexPath.row) {
switch cellID {
case .SwitchModeCell:
// do whatever you want to do here
default: break
}
}
并且在上面的示例中,VAXSettingsCells对于SwitchModeCell具有隐式原始值0,依此类推。所以你不需要明确地给它。只需使用
enum VAXSettingsCells : Int
{
case SwitchModeCell
case SwitcherCell
case NewProgramCell
case CreatedProgramCell
}
使用其rawValue属性访问枚举案例的原始值。
答案 1 :(得分:1)
如上所述,您的cellID
类型为VAXSettingsCells?
,它是可选的,您无法在switch-case语句中直接使用它。
可选绑定(if-let)将是首选解决方案,但您有另一种选择。使用postfix ?
表示法。
您可以将switch语句编写为:
let cellID = VAXSettingsCells(rawValue: indexPath.row)
switch cellID {
case .SwitchModeCell?:
let cell = theTableView.dequeueReusableCellWithIdentifier(VAXSettingsSwitchModeCell.reusableCellIdentifier()) as! VAXSettingsSwitchModeCell
cell.delegate = self
return cell
//...
记住postfix ?
表示法case value?:
只是case .Some(value):
的简写。你最好看this thread。