J'ai
enum Colour {
white,
pink,
yellow,
blue
} Colour;
et je voudrais faire quelque chose comme ça :
for (int colour in Colour){
// Do something here.
}
Puis-je le faire et si oui, comment ? Merci pour votre aide !
J'ai
enum Colour {
white,
pink,
yellow,
blue
} Colour;
et je voudrais faire quelque chose comme ça :
for (int colour in Colour){
// Do something here.
}
Puis-je le faire et si oui, comment ? Merci pour votre aide !
Bien que la question ait déjà reçu une réponse, voici mes deux cents :
enum Colour {
white = 0,
pink,
yellow,
blue,
colorsCount // since we count from 0, this number will be blue+1 and will be actual 'colors count'
} Colour;
for (int i = 0; i < colorsCount; ++i)
someFunc((Colour)i);
Je suppose que ce n'est pas si mal et que c'est assez proche de l'énumération rapide que vous souhaitez.
J'ai des erreurs parce que typedef
ed mon enum. Existe-t-il une solution de contournement pour cette situation ?
Une énumération vient du C alors que l'énumération rapide a été un ajout de l'Objective-C 2.0 ils ne fonctionnent pas ensemble.
Type existingItem;
for ( existingItem in expression ) { statements }
L'expression doit être conforme au protocole NSFastEnumeration et être un objet ! Les "éléments" d'une énumération ne sont pas des objets.
voir ce lien pour plus d'informations Documents d'énumération rapide d'Apple
Vérifiez cet exemple pour voir comment l'énumération rapide fonctionne :
NSArray *array = [NSArray arrayWithObjects:
@"One", @"Two", @"Three", @"Four", nil];
for (NSString *element in array) {
NSLog(@"element: %@", element);
}
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"quattuor", @"four", @"quinque", @"five", @"sex", @"six", nil];
NSString *key;
for (key in dictionary) {
NSLog(@"English: %@, Latin: %@", key, [dictionary objectForKey:key]);
}
L'élément "Count" dans l'enum est intéressant, mais il vous permettra d'obtenir "Not all switch cases were handled" dans l'enum. switch
à moins que vous ne gériez cet élément "count" dans celui-ci. Une meilleure solution consiste à utiliser des alias pour le premier et le dernier élément :
enum Colour {
firstColour = 0,
white = firstColour,
pink,
yellow,
blue,
lastColour = blue
} Colour;
for (int i = firstColour; i <= lastColour; ++i) {
}
Pour les cas où je ne suis pas l'auteur de l'énumération, je procède comme suit. Je pense que c'est assez sûr pour l'avenir, car cela ne se soucie pas de la façon dont les types d'énumération sont réellement mis en œuvre.
UISwipeGestureRecognizerDirection allDirections[] = {
UISwipeGestureRecognizerDirectionDown,
UISwipeGestureRecognizerDirectionLeft,
UISwipeGestureRecognizerDirectionRight,
UISwipeGestureRecognizerDirectionUp
};
for (int i = 0; i < sizeof(allDirections)/sizeof(allDirections[0]); ++i) {
UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipe:)];
swipeGesture.direction = allDirections[i];
[self addGestureRecognizer:swipeGesture];
}
Je suis venu sur ce poste pour répondre à cette question également. La réponse de Gobra est excellente. Mais mon nombre d'éléments peut fluctuer, et correspondre à une valeur stockée, donc pour être sûr que le compte "colorsCount" n'est ou n'a jamais été une valeur valide, j'ai fini par implémenter ce qui suit et je voulais ajouter à la discussion :
MYColor.h
typedef NS_ENUM( NSInteger, MYColorType )
{
MYColorType0 = 0,
MYColorType1,
MYColorType2,
MYColorType3
};
static inline MYColorType MYColorTypeFirst() { return MYColorType0; }
static inline MYColorType MYColorTypeLast() { return MYColorType3; }
ViewController.m
for ( int i = MYColorTypeFirst(); i <= MYColorTypeLast(); i++ )
{
MYColor * color = [[MYColor alloc] initWithType:i];
...
}
L'ajout notable étant la définition de MYColorTypeFirst() et MYColorTypeLast(), qui est utilisée dans l'itération for(), placée près de la définition de l'enum pour des raisons de maintenabilité.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Duplicata possible de Boucler sur les valeurs de l'enum