问题 枚举与Swift中的开关


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

enum TabItems {
    case FirstTab
    case SecondTab
    case ThirdTab
}

这是我的循环:

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

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


10498
2017-08-07 07:22


起源



答案:


你得到的错误是因为 item.tag 被宣布为 Int (NSInteger 在最初的API)但你试图将它与你的比较 TabItems 枚举。你可以使用 Int 你的价值观 switch 声明:

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

或者您可以将标签转换为您的标签 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")
        }
    }
}

10
2017-08-07 14:04



Swift 2.1具有以下语法 if let tabItem = TabItems(rawValue: item.tag) { - Akshit Khurana


答案:


你得到的错误是因为 item.tag 被宣布为 Int (NSInteger 在最初的API)但你试图将它与你的比较 TabItems 枚举。你可以使用 Int 你的价值观 switch 声明:

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

或者您可以将标签转换为您的标签 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")
        }
    }
}

10
2017-08-07 14:04



Swift 2.1具有以下语法 if let tabItem = TabItems(rawValue: item.tag) { - Akshit Khurana