我有一系列“策略”对象,我认为将它们作为一组策略类上的类方法来实现很方便。我为此指定了一个协议,并创建了符合的类(下面仅显示一个)
@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];
我在 return 语句上收到警告 - 它说 -countFor: not find in protocol (因此它假设它是一个我想调用类方法的实例方法)。然而,由于我的数组中的对象是类的实例,它们现在就像实例方法(或者从概念上讲它们应该是)。
有没有一种神奇的方法来调用类方法?或者这只是一个坏主意,我应该只创建策略对象的实例(而不是使用类方法)?