ios - for - the swift programming language pdf



Swift-Cast Int en la enumeración: Int (2)

Soy 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 la etiqueta) es el mejor, pero de todos modos tengo que hacer este tipo de casting en diferentes lugares de mi aplicación. ¿Alguien tiene una idea de cómo deshacerse de este error?

¡Gracias!


Answer #1

Use el inicializador rawValue : es un inicializador generado automáticamente para enum s.

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

ver: El lenguaje de programación Swift § Enumeraciones

NOTA: Esta respuesta ha cambiado. La versión anterior de Swift utiliza el método de clase fromRaw() para convertir valores sin fromRaw() a valores enumerados.


Answer #2

Uso de Enum para la comparación como a continuación:

enum LoanType: Int {
    case FHA , VA, CONS, CASH
}
var loanType = LoanType.FHA

Comparación:

if loanType == .FHA
     {
      print("FHA")
     }

Para cambiar el valor:

loanType = .CASH




swift