У меня есть ряд объектов "политики", которые, как я думал, будут удобны для реализации как методы класса в наборе классов политик. Я указал протокол для этого и создал классы для соответствия (только один, показанный ниже)
@protocol Counter
+(NSInteger) countFor: (Model *)model;
@end
@interface CurrentListCounter : NSObject <Counter>
+(NSInteger) countFor: (Model *)model;
@end
Затем у меня есть массив классов, соответствующих этому протоколу (например, CurrentListCounter)
+(NSArray *) availableCounters {
return [[[NSArray alloc] initWithObjects: [CurrentListCounter class], [AllListsCounter class], nil] autorelease];
}
Обратите внимание, как я использую классы, подобные объектам (и это может быть моей проблемой). В классах Smalltalk есть объекты, подобные всем остальным, - я не уверен, что они находятся в Objective-C?)
Моя конкретная проблема заключается в том, когда я хочу вызвать метод, когда я беру один из объектов политики из массива:
id<Counter> counter = [[MyModel availableCounters] objectAtIndex: self.index];
return [counter countFor: self];
Я получаю предупреждение о возврате - он говорит -countFor: не найден в протоколе (поэтому его предполагается его метод экземпляра, где я хочу вызвать метод класса). Однако, поскольку объекты в моем массиве являются экземплярами класса, они теперь похожи на методы экземпляра (или концептуально они должны быть).
Есть ли волшебный способ вызова методов класса? Или это просто плохая идея, и я должен просто создавать экземпляры моих объектов политики (а не использовать методы класса)?