Swift - трансляция Int в enum: Int

Я очень новичок в Swift (начался на этой неделе), и я переношу свое приложение из Objective-C. У меня есть в основном следующий код в Objective-C, который отлично работает:

typedef enum : int {
    MyTimeFilter1Hour = 1,
    MyTimeFilter1Day = 2,
    MyTimeFilter7Day = 3,
    MyTimeFilter1Month = 4,
} MyTimeFilter;

...

- (void)selectFilter:(id)sender
{
    self.timeFilterSelected = (MyTimeFilter)((UIButton *)sender).tag;
    [self closeAnimated:YES];
}

При переводе в Swift я сделал следующее:

enum MyTimeFilter : Int {
    case OneHour = 1
    case OneDay = 2
    case SevenDays = 3
    case OneMonth = 4
}

...

@IBAction func selectFilter(sender: AnyObject) {
    self.timeFilterSelected = (sender as UIButton).tag as MyTimeFilter
    self.close(true)
}

Таким образом, я получаю сообщение об ошибке:

'Int' не конвертируется в 'MyTimeFilter'

Я не знаю, лучший ли мой подход (с использованием свойства тега), но в любом случае мне нужно делать такие кастинги в разных местах моего приложения. Кто-нибудь имеет представление о том, как избавиться от этой ошибки?

Спасибо!

Ответ 1

Используйте инициализатор rawValue: это инициализатор, автоматически сгенерированный для enum s.

self.timeFilterSelected = MyTimeFilter(rawValue: (sender as UIButton).tag)!

см.: Язык быстрого программирования § Перечисления


ПРИМЕЧАНИЕ. Этот ответ изменился. Ранняя версия Swift использует метод класса fromRaw() для преобразования необработанных значений в перечисленные значения.

Ответ 2

Swift 5

timeFilterSelected = MyTimeFilter(rawValue: sender.tag)