Marcos Duarte Marcos Duarte - 4 months ago 24
iOS Question

Swift - Cast Int into enum:Int

I am very new to Swift (got started this week) and I'm migrating my app from Objective-C. I have basically the following code in Objective-C that works fine:

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];
}


When translating it to Swift, I did the following:

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)
}


By doing that, I get the error :


'Int' is not convertible to 'MyTimeFilter'


I don't know if my approach (using the tag property) is the best, but anyway I need to do this kind of casting in different places in my app. Does anyone have an idea of how to get rid of this error?

Thanks!

Answer

Use the rawValue initializer: it's an initializer automatically generated for enums.

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

see: The Swift Programming Language ยง Enumerations


NOTE: This answer has changed. Earlier version of Swift use the class method fromRaw() to convert raw values to enumerated values.