Подсказка сверхновичку

import SpriteKit
import GameplayKit
class GameScene: SKScene {
    
    var starfield: SKEmitterNode!
    var player: SKSpriteNode!
    override func didMove(to view: SKView){
        starfield = SKEmitterNode(fileNamed: "starfield")
        starfield.position = CGPoint(x: 0, y: 0 )
        starfield.advanceSimulationTime(10)
        self.addChild(starfield)
        starfield.zPosition = -1
    }
    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
    }
}

выдает ошибку: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

прошу разъяснить почему Xcode не компилирует данные строки.


Ответы (1 шт):

Автор решения: Andrew

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

Использование знака восклицания игнорирует что это нулейбл и обращается как к обычной переменной которая не может быть пустой. Поэтому ошибка и выдается.

что бы избежать такого есть 2 способа на проверку на нил.

guard let starfield  = starfield else { return }
/// здесь starfield наверняка не нил
if let starfield  = starfield {
/// здесь starfield наверняка не нил
}
→ Ссылка