2016-11-20 62 views
2

我有一個擴展SKScene的Menu類,但我無法訪問視圖,這是SKScene的一個屬性。相反,我得到以下錯誤:「實例成員'視圖'不能用於類型菜單上。」類擴展SKScene但不能訪問其屬性

有沒有什麼特別的我需要做的訪問呢?它似乎應該已經可以稱之爲。

這裏是類的縮短版:

class Menu: SKScene { 
var blueButton: Button! 
var touchNode: SKSpriteNode! 
var newScene: SKScene? 

override func didMove(to view: SKView) { 
    blueButton = self.childNode(withName: "Start") as! Button 

} 
... 
class func transitionToScene(node: String) { 
    var scene = SKScene() 

    switch node { 
     case "NewGame": 
      scene = GameScene() 

     default: 
      debugPrint("transition to scene called on no button") 
    } 
    scene.scaleMode = SKSceneScaleMode.aspectFill 
    //(self.view as! SKView).presentScene(scene) 

    self.view.presentScene(scene) 
} 

問題涉及在最後一行。在它上面,我評論了一個不同的嘗試,但這也沒有奏效。

回答

2

您必須注意實例方法和類型方法之間的區別。實例方法在特定類型的實例上調用。你可以這樣定義它們:

class SomeClass { 

    func myInstanceMethod() { 

    } 
} 

類型方法是在類型本身上調用的方法。您可以使用static關鍵字或您的示例class關鍵字(類關鍵字允許子類重寫該方法的超類實現)來定義它們。

所以,總之你應該使用一個實例方法,因爲self在你的情況下引用當前實例,而不是Menu類型(只是刪除class關鍵字)。

+0

這可能是一個超級愚蠢的問題,但是'static func'和'class func'有什麼區別? – Confused

+1

@Confused如果一個方法被聲明爲類func,那麼子類可以覆蓋這個方法。定義爲靜態的方法不能在子類中重寫。 – Whirlwind