[英]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.