繁体   English   中英

在类参数上调用类方法

[英]Calling class method on a class parameter

我需要调用一个类方法来运行Cocos2D场景。 我有一个游戏控制器,在其中我将以不同的状态(或熟悉Cocos2D的人)传递。 请参见下面的代码:

-(void)startGameWithState:(Class)s {
    [[CCDirector sharedDirector] runWithScene: [s scene]];
}

事实是,这工作正常,但会生成以下警告:

No '+scene' method found

我希望尽可能避免出现警告,那么如何解决此问题?

更新:这就是我所做的。

-(void)changeStateTo:(Class <GameState>)s {
    [[CCDirector sharedDirector] runWithScene: [s scene]];
}

通过让GameState协议定义+ scene方法,我不会收到任何警告。

基本上,只需使用scene类方法声明一个协议或抽象类,以便编译器知道它的存在。

它告诉您通用类型- Class -没有名为scene的方法。 如果您要传递状态/层,则这些必须是某个实际的类,对吗? 你需要告诉编译类s居然是如此,它可以找到scene的方法就可以了。

如果您将始终通过具体课程,请写

-(void)startGameWithState:(ConcreteClass*)s

如果您将使用不同的类,而它们之间没有任何层次结构,请使用id以避免警告

-(void)startGameWithState:(id)s

第二种方法不是很好,因为如果将不正确的类对象传递给该方法,则会出现运行时错误。 但是在编译状态下一切都会好起来的

如果您知道传递的每个类都将使用+(id) scene方法从某个基类派生,则传递基类:

-(void)startGameWithState:(BaseClass*)s

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM