Je suis très nouveau sur Swift (j'ai commencé cette semaine) et je migre mon application d'Objective-C. J'ai essentiellement le code suivant en Objective-C qui fonctionne 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];
}
Lors de la traduction en Swift, j'ai fait ce qui suit:
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)
}
En faisant cela, j'obtiens l'erreur:
'Int' n'est pas convertible en 'MyTimeFilter'
Je ne sais pas si mon approche (en utilisant la propriété tag) est la meilleure, mais de toute façon je dois faire ce genre de casting à différents endroits de mon application. Quelqu'un a-t-il une idée de la façon de se débarrasser de cette erreur?
Merci!
(sender as UIButton)
, vous pouvez simplement changer la signature de la méthode pour prendre unUIButton
au lieu deAnyObject
.Réponses:
Utilisez l'
rawValue
initialiseur: c'est un initialiseur généré automatiquement pourenum
s.voir: Le langage de programmation Swift § Enumérations
REMARQUE: cette réponse a changé. La version antérieure de Swift utilise la méthode de classe
fromRaw()
pour convertir les valeurs brutes en valeurs énumérées.la source
!
.Swift 5
la source
élaborer sur la réponse de Jeffery Thomas. pour être sûr, placez une déclaration de garde déballer le plâtre avant de l'utiliser, cela évitera les plantages
la source