Soy muy nuevo en Swift (comencé esta semana) y estoy migrando mi aplicación desde Objective-C. Básicamente tengo el siguiente código en Objective-C que funciona bien:
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];
}
Al traducirlo a Swift, hice lo siguiente:
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)
}
Al hacer eso, obtengo el error:
'Int' no es convertible a 'MyTimeFilter'
No sé si mi enfoque (usando la propiedad de etiqueta) es el mejor, pero de todos modos necesito hacer este tipo de casting en diferentes lugares de mi aplicación. ¿Alguien tiene una idea de cómo deshacerse de este error?
¡Gracias!
(sender as UIButton)
, simplemente puede cambiar la firma del método para tomar enUIButton
lugar deAnyObject
.Respuestas:
Use el
rawValue
inicializador: es un inicializador generado automáticamente paraenum
s.ver: El lenguaje de programación Swift § Enumeraciones
NOTA: esta respuesta ha cambiado. La versión anterior de Swift usa el método de clase
fromRaw()
para convertir valores sin procesar en valores enumerados.fuente
!
.Swift 5
fuente
elaborando la respuesta de Jeffery Thomas. para estar seguro coloque una declaración de guardia desenvuelva el yeso antes de usarlo, esto evitará accidentes
fuente