Je suis très nouveau pour Swift (commencé cette semaine) et je migre mon application depuis Objective-C. J'ai essentiellement le code suivant dans 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 procédé comme 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 je dois quand même faire ce type de casting à différents endroits de mon application. Quelqu'un at-il une idée de la façon de se débarrasser de cette erreur?
Merci!
Utilisez l'initialisateur rawValue
: c'est un initialiseur généré automatiquement pour enum
s.
self.timeFilterSelected = MyTimeFilter(rawValue: (sender as UIButton).tag)!
voir: Le Swift Langage de Programmation § Énumérations
REMARQUE: cette réponse a changé. Les versions antérieures de Swift utilisent la méthode de classe fromRaw()
pour convertir les valeurs brutes en valeurs énumérées.
Utilisation de Enum pour la comparaison comme ci-dessous:
enum LoanType: Int {
case FHA , VA, CONS, CASH
}
var loanType = LoanType.FHA
Comparaison:
if loanType == .FHA
{
print("FHA")
}
Pour changer de valeur:
loanType = .CASH