Подтвердить что ты не робот

Enum с переключателем 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?

4b9b3361

Ответ 1

Вы получаете ошибку, потому что 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")
        }
    }
}