Ich verwende SpriteKit in einer iOS App und versuche, die camera
Eigenschaft meines SKScene in der überschriebenen didMoveToView
Methode zu initialisieren. Wenn ich es nur initialisieren wie so:SpriteKit SKCameraNode - Nil beim Entpacken eines optionalen Werts direkt nach dem zugewiesenen
override func didMoveToView(view: SKView) {
...
self.camera = SKCameraNode()
self.addChild(self.camera!)
}
... es wirft die Ausnahme unexpectedly found nil while unwrapping an Optional value
an der self.addChild
Linie, aber wenn ich dies tun:
override func didMoveToView(view: SKView) {
...
let camera = SKCameraNode()
self.camera = camera
self.addChild(self.camera!)
}
... es funktioniert gut, keine Ausnahme . Warum unterscheiden sich diese beiden Wege? Gibt es eine Art Müllabfuhr? Es ist nicht unpraktisch, das zweite Format zu verwenden, das funktioniert, aber ich bin gespannt, was mich unterscheidet.
weak public var camera: SKCameraNode?
Daher wird, wie ARC jede Instanz freigeben wird, die keinen starken Hinweis darauf hat (Swift uses ARC, nicht Garbage Collection) - so schnell wie:
Können Sie uns bitte im ersten Fall zeigen, wie Sie Ihre Kamera deklarieren? – H4Hugo
Das ist es, ich nahm an, dass die 'Kamera' optionale Variable in der SKScene (" self "hier bezieht sich auf eine SKScene-Unterklasse) konnte initialisiert werden und diese Referenz würde das Kameraobjekt vor Garbage Collection schützen. 'self.camera' wird in SKScene-Dateien innerhalb von SpriteKit deklariert. – jaxuru