簡體   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