Sou muito novo no Swift (comecei esta semana) e estou migrando meu aplicativo do Objective-C. Eu tenho basicamente o seguinte código no Objective-C que funciona bem:
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];
}
Ao traduzi-lo para Swift, fiz o seguinte:
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)
}
Ao fazer isso, recebo o erro:
'Int' não é conversível em 'MyTimeFilter'
Não sei se minha abordagem (usando a propriedade tag) é a melhor, mas, mesmo assim, preciso fazer esse tipo de transmissão em lugares diferentes no meu aplicativo. Alguém tem uma idéia de como se livrar desse erro?
Obrigado!
(sender as UIButton)
, você pode simplesmente alterar a assinatura do método para obter um emUIButton
vez deAnyObject
.Respostas:
Use o
rawValue
inicializador: é um inicializador gerado automaticamente paraenum
s.Vejo: A linguagem de programação Swift § Enumerações
NOTA: Esta resposta foi alterada. A versão anterior do Swift usa o método de classe
fromRaw()
para converter valores brutos em valores enumerados.fonte
!
.Swift 5
fonte
elaborando a resposta de Jeffery Thomas. ser seguro colocar uma declaração de guarda desembrulhar o elenco antes de usá-lo, isso evitará falhas
fonte