2016-04-20 7 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' не будет' истинным'? – songyuanyao

+1

Довольно аккуратно, что компилятор может понять это. Было бы одно, если бы 'aliensDestroyed' были постоянными, но для переменной это еще более впечатляюще. – BallpointBen

ответ

4

Вы объявляете новую переменную с именем aliensDestroyed со значением 0. Затем вы увеличиваете значение до 1.

Затем вы проверяете, больше ли значение 10. Это никогда не может быть правдой. Он всегда будет 1.

Поэтому содержимое инструкции if никогда не будет выполнено.

Возможно, вам нужна переменная экземпляра с именем aliensDestroyed вместо создания новой локальной переменной внутри вашей функции torpedoDidCollideWithAlien.

0

Это не ошибка, это предупреждение. Компилятор выполнил анализ вашего кода и говорит вам, что так, как вы его написали, ваш оператор if никогда не будет правдой, поэтому оператор внутри фигурных скобок никогда не будет выполнен.

rmaddy объяснил, почему в его ответе.