枚举在Swift中切换

Ale*_*lex 11 enums switch-statement swift

我正在尝试遍历所有选项卡项以通过使用枚举的开关设置一些属性:

enum TabItems {
    case FirstTab
    case SecondTab
    case ThirdTab
}
Run Code Online (Sandbox Code Playgroud)

这是我的循环:

for item in self.tabBar.items {
    switch item.tag {
    case .FirstTab:
        println("first tab")
    default:
        println("tab not exists")
    }
}
Run Code Online (Sandbox Code Playgroud)

有一个错误:Enum case 'FirstTab' not found in type 'Int!'.如何在此switch语句中正确使用enum?

Nat*_*ook 11

您收到错误是因为item.tag声明为Int(NSInteger最初在API中),但您尝试将其与TabItems枚举进行比较.您可以Intswitch语句中使用值:

for item in self.tabBar.items {
    switch item.tag {
    case 0:
        println("first tab")
    case 1:
        println("second tab")
    default:
        println("not recognized")
    }
}
Run Code Online (Sandbox Code Playgroud)

或者您可以将标记转换为您的标记enum,如下例所示.(请注意,您需要更新枚举声明以支持.fromRaw().)

enum TabItems : Int {
    case FirstTab = 0
    case SecondTab
    case ThirdTab
}

for item in self.tabBar.items {
    if let tabItem = TabItems.fromRaw(item.tag) {
        switch tabItem {
        case .FirstTab:
            println("first tab")
        case .SecondTab:
            println("second tab")
        default:
            println("not recognized")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • Swift 2.1具有以下语法`if let tabItem = TabItems(rawValue:item.tag){` (2认同)