2016-03-15 5 views
-1

Im делает игру захватчиков пространства, и она продолжает сбой по той же причине. код, который имеет «ошибка» в нем:Приложение продолжает разбиваться в случайные моменты Swift

if (firstBody.categoryBitMask & missileCategory) != 0 && 
     (secondBody.categoryBitMask & alienCategory) != 0 { 
      destroyAlien(firstBody.node as! SKSpriteNode, alien: secondBody.node as! SKSpriteNode) 

    } 
} 

И ошибка крах:

фатальная ошибка: неожиданно нашли ноль в то время как разворачивание необязательное значение

+0

Таким образом, либо 'firstBody.node' равен нулю, либо' secondBody.node' равен нулю, а ваши силы-разворачивают их, приводя к сбою. – Michael

+0

Когда вы используете '!' И 'as!', Вы получаете возможность для своего приложения сбой, если значение равно _nil_. Попробуйте заменить все '!' На '?' И получите свое приложение для компиляции. – nielsbot

+0

как я могу заставить их развернуть их? @Michael –

ответ

0

В настоящее время вы будете силу -отключение firstBody.node и secondBody.node с использованием as!. Если любой из них равен нулю, ваше приложение выйдет из строя. Вы должны изменить destroyAlien, чтобы принять параметры, которые являются необязательными, а затем используйте as?.

func destroyAlien(node1: SKSpriteNode?, alien node2: SKSpriteNode?) { 
    if let node1 = node1 { 
     // node1 not nil 
    } 
    if let node2 = node2 { 
     // node2 not nil 
    } 
} 

Тогда ваш код становится:

if (firstBody.categoryBitMask & missileCategory) != 0 && 
     (secondBody.categoryBitMask & alienCategory) != 0 { 
      destroyAlien(firstBody.node as? SKSpriteNode, alien: secondBody.node as? SKSpriteNode) 
    } 
} 

Это предполагает, что вы хотите, чтобы один или оба быть равны нулю. Если ни один из них не должен быть равен нулю, у вас есть логическая ошибка раньше в вашем коде.

Смежные вопросы