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