J'ai une série d'objets de "politique" que je pensais être pratique à implémenter en tant que méthodes de classe sur un ensemble de classes de politiques. J'ai spécifié un protocole pour cela, les classes créées pour se conformer à (juste un illustré ci-dessous)Comment appeler les méthodes + class dans Objective C sans faire référence à la classe?
@protocol Counter
+(NSInteger) countFor: (Model *)model;
@end
@interface CurrentListCounter : NSObject <Counter>
+(NSInteger) countFor: (Model *)model;
@end
J'ai alors un tableau des classes qui sont conformes à ce protocole (comme CurrentListCounter ne)
+(NSArray *) availableCounters {
return [[[NSArray alloc] initWithObjects: [CurrentListCounter class], [AllListsCounter class], nil] autorelease];
}
Remarquez comment j'utilise les classes comme des objets (et cela pourrait être mon problème - dans les classes Smalltalk sont des objets comme tout le reste - Je ne sais pas si elles sont en Objective-C?)
mon problème exact est quand je veux appeler la méthode quand je prends l'un des po objets LICY sur le tableau:
id<Counter> counter = [[MyModel availableCounters] objectAtIndex: self.index];
return [counter countFor: self];
je reçois un avertissement sur la déclaration de retour - il dit -countFor: non trouvé dans le protocole (de sorte que son hypothèse d'une méthode d'instance où je veux appeler une méthode de classe). Cependant, comme les objets de mon tableau sont des instances de classe, ils sont maintenant comme des méthodes d'instance (ou conceptuellement ils devraient l'être).
est-il un moyen magique pour appeler des méthodes de classe? Ou est-ce juste une mauvaise idée et je devrais juste créer des instances de mes objets de politique (et ne pas utiliser les méthodes de classe)?
Compteur sans compteur –