2016-04-20 49 views
0

我不知道爲什麼這個錯誤出現在代碼:「永遠不會被執行」

func torpedoDidCollideWithAlien(torpedo:SKSpriteNode, alien:SKSpriteNode){ 
     print("HIT") 
     torpedo.removeFromParent() 
     alien.removeFromParent() 

     var aliensDestroyed = 0 
     aliensDestroyed += 1 

     if (aliensDestroyed > 10){ //Transition to GameOver or Success 
      let transition:SKTransition = SKTransition.flipHorizontalWithDuration(0.5) 
       let gameOverScene:SKScene = GameOverScene(size: self.size, won: true) 
       self.view?.presentScene(gameOverScene, transition: transition) 
      } 

的錯誤是在該行:

let transition:SKTransition = SKTransition.flipHorizontalWithDuration(0.5) //'Will never be executed' 
+2

因爲'aliensDestroyed'將始終爲'1'而'aliensDestroyed> 10'將不會是'true'? – songyuanyao

+1

編譯器可以弄清楚的漂亮整潔。如果「外星人遭受破壞」是一個常數,那將是一回事,但對於一個變量來說,這更加令人印象深刻。 – BallpointBen

回答

4

您聲明名爲aliensDestroyed新變量值爲0。然後您將該值增加到1

然後檢查值是否大於10.這不可能是真的。它將永遠是1

因此,if語句的內容將永遠不會執行。

你可能想要的是一個名爲aliensDestroyed的實例變量,而不是在torpedoDidCollideWithAlien函數中創建一個新的局部變量。

0

這不是一個錯誤,它是一個警告。編譯器已經對你的代碼進行了分析,並告訴你,你寫if語句的方式永遠不會是真的,所以大括號內的語句永遠不會被執行。

rmaddy解釋了他在答案中的原因。

相關問題