我加了一组类的数组,所有这一切,我知道有相同的超类:
[array addObject:[Africa class]];
[array addObject:[Brazil class]];
[array addObject:[France class]];
后来,我想要得到的类对象,并调用一个超类的方法就可以了。 事情是这样的:
Class class = [array objectAtIndex:1];
(Country class) specificClass = class;
我试过不同思想的变化,但无法弄清楚如何把最后一行代码。
如果我得到你的权利,你想要一个变量指向一个类的对象,静态类型的具体类。
这在Objective-C不可能的; 没有强类型的类指针。 Class class
是你能做的最好的。
您可以发送任何已知的类方法的Class
类型的变量...
[class alloc];
[class defaultManager];
[class myCommonClassMethod];
...未做编译器抱怨。 当然,其中的一些例子可能会在运行时失败。
有了适当的设计模式,你不应该需要知道你正在使用哪个国家的。
通过创建一个启动AbstractCountry
声明(并提供存根实现)你的国家需要一般响应的所有方法类(即国家可以更具体)。
然后子类化AbstractCountry
为每个单独的国家。
然后:
AbstractCountry *countryClass = [array objectAtIndex:n];
如果你需要的是只存在于一个国家的行为,那么无论是推存根实现了(这不会是非常优雅)或测试响应选择器(也没有优雅)或适当投(脆弱)。
当然,所有这一切都提出为什么你做这个,而不是实例类(尽管该实例的设计是相同的问题;考虑像UIControl和所有子类 - 控制提供的,而子控件的抽象行为通过经常重写抽象方法)实现特定类型的控件。
通常在Objective-C,你会打电话像这样的方法:
[class someMethod];
所以你的情况,让我们假装你的父(我假设“国家”)必须设置人口或东西的方法,它看起来像:
[Africa setPopulation:someInteger];