Ваша необязательная обработка действительно противоречива.Иногда вы используете необязательное приведение и необязательное сцепление, чтобы затем использовать принудительное развертывание для одной и той же переменной в той же строке.Вы должны принудительно развернуть возвращаемое значение SKSpriteNode(fileNamed: "perno")
, так как, если оно возвращает nil
, это ошибка программиста и должна быть перехвачена как можно скорее.
Ваша непосредственная проблема заключается в том, что вы пытаетесь перезаписать perno
вsceneDidLoad
:
self.perno = self.childNode(withName: "perno") as? SKSpriteNode
К вашей сцене не добавлено childNode
, поэтому вы просто устанавливаете perno
на nil
вместо его ранее установленного значения, используя var perno = SKSpriteNode(fileNamed: "perno")
.Просто удалите эту строку из sceneDidLoad
, так как это не имеет смысла, perno
уже загружен во время инициализации, поскольку вы присваиваете ему значение.
class Level2: SKScene {
var entities = [GKEntity]()
var graphs = [String : GKGraph]()
let perno = SKSpriteNode(fileNamed: "perno")!
override func sceneDidLoad () {
print ("view2 Loaded")
self.perno.texture = SKTexture(imageNamed: "perno")
self.perno.size.width = self.perno.size.width * 5
self.perno.physicsBody = SKPhysicsBody(texture: perno.texture!, size: perno.texture!.size())
}
}
Лучший способ защитить себя - это использоватьguard
заявление.guard
позволяет безопасно проверять, является ли переменная не равной nil, без необходимости вложения вашего кода.
class Level2: SKScene {
var entities = [GKEntity]()
var graphs = [String : GKGraph]()
let perno = SKSpriteNode(fileNamed: "perno")!
override func sceneDidLoad () {
print ("view2 Loaded")
guard let texture = SKTexture(imageNamed: "perno")
else{
fatalError("Unable to find texture "perno")
}
self.perno.texture = texture
self.perno.size.width = self.perno.size.width * 5
self.perno.physicsBody = SKPhysicsBody(texture: texture, size: texture.size())
}
}
Как видите, мы не слишком развертываем self.perno.texture
, что означает, что будет меньшешансы для нас случайно использовать?вместо!, и у нас есть четкая ошибка, объясняющая причину сбоя нашего кода.