使用enum swift问题

时间:2016-08-08 10:45:21

标签: ios swift enums

我有枚举:

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开关。

2 个答案:

答案 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