未知类的对象调用类的方法(Call class method on object of unknow

2019-10-18 07:13发布

我加了一组类的数组,所有这一切,我知道有相同的超类:

[array addObject:[Africa class]];
[array addObject:[Brazil class]];
[array addObject:[France class]];

后来,我想要得到的类对象,并调用一个超类的方法就可以了。 事情是这样的:

Class class = [array objectAtIndex:1];

(Country class) specificClass = class;

我试过不同思想的变化,但无法弄清楚如何把最后一行代码。

Answer 1:

如果我得到你的权利,你想要一个变量指向一个类的对象,静态类型的具体类。

这在Objective-C不可能的; 没有强类型的类指针。 Class class是你能做的最好的。

您可以发送任何已知的类方法的Class类型的变量...

[class alloc];
[class defaultManager];
[class myCommonClassMethod];

...未做编译器抱怨。 当然,其中的一些例子可能会在运行时失败。



Answer 2:

有了适当的设计模式,你不应该需要知道你正在使用哪个国家的。

通过创建一个启动AbstractCountry声明(并提供存根实现)你的国家需要一般响应的所有方法类(即国家可以更具体)。

然后子类化AbstractCountry为每个单独的国家。

然后:

AbstractCountry *countryClass = [array objectAtIndex:n];

如果你需要的是只存在于一个国家的行为,那么无论是推存根实现了(这不会是非常优雅)或测试响应选择器(也没有优雅)或适当投(脆弱)。

当然,所有这一切都提出为什么你做这个,而不是实例类(尽管该实例的设计是相同的问题;考虑像UIControl和所有子类 - 控制提供的,而子控件的抽象行为通过经常重写抽象方法)实现特定类型的控件。



Answer 3:

通常在Objective-C,你会打电话像这样的方法:

[class someMethod];

所以你的情况,让我们假装你的父(我假设“国家”)必须设置人口或东西的方法,它看起来像:

[Africa setPopulation:someInteger];


文章来源: Call class method on object of unknown class