Je dois initialiser de nombreux types d’objects en fonction d’un paramètre entier. Ils ont tous les mêmes méthodes d’initialisation globales.
Pour le moment j’ai le code suivant
#def APPLE 1 #def PEAR 2 switch (t) { case APPLE: newobj = [[FApple alloc] init]; break; case PEAR: newobj = [[FPear] alloc] init]; break; default: retobj = nil; }
Je crois qu’il doit y avoir un meilleur moyen de faire cela. Quand j’ajoute FOrange, je dois y aller et append une autre ligne ici.
Quel serait un meilleur moyen?
Vous avez besoin d’un numéro de mappage -> tapez quelque part, mais vous n’avez pas besoin de répéter le code:
NSDictionary* d = [NSDictionary dictionaryWithObjectsAndKeys: [FPear class], [NSNumber numberWithInt:PEAR ], [FApple class], [NSNumber numberWithInt:APPLE], nil]; Class c = [d objectForKey:[NSNumber numberWithInt:t]]; id x = [[c alloc] init];
Ce que vous faites ne présente aucun NSClassFromSsortingng()
bien que l’utilisation d’un type énuméré puisse être moins sujette à l’erreur que #define
s), mais vous voudrez peut-être consulter NSClassFromSsortingng()
, qui fait ce que son nom suggère
- (id)newFruit:(NSSsortingng *)classSsortingng { //pass in @"FApple" or @"FPear" Class fruitClass = NSClassFromSsortingng(classSsortingng); return [[fruitClass alloc] init]; }
Cela pourrait aussi avoir un léger impact sur les performances.