好吧,想象一下我有一个动物园,我只希望它包含某种颜色的动物。我有一个 Zoo 对象,它有一个颜色属性(在这个例子中,一个字符也可以是某种对象)。我还有一个 Animal 类,我从不实例化它(我仍然认为它是抽象的,我是 java),因为我用动物类型扩展了它。
我想检查是否可以将特定的动物类型添加到我的动物园。我不喜欢让颜色成为 Animal 的属性并且必须先实例化每个 Animal 才能检查我是否可以拥有一个的想法。在我看来,我希望 color t 是 Animal 的类变量而不是实例变量,至少我在 Java 中是这样做的,但我知道风格完全不同。
我的解决方案是:
在动物园控制器中:
if([zoo canAddAnimalOfType:[Elephant class]])
{
[zoo addAnimal:([Elephant animal])];
}
在动物园里:
@property char colour;
- (BOOL)canAddAnimalOfType:(Class)animalType
{
if([animalType colour] == colour)
{
return YES;
}
else
{
return NO;
}
}
这是我在Animal(大象扩展)中缺少类变量的解决方案:
+(char)colour
{
return 'n';
}
所以实际上我使用了一个类方法来封装一个类变量,这对我来说似乎有点乱。我的问题是,这是 Objective C 的方式吗?如果不是,那会是什么?
谢谢