¿Cómo usar las funciones de extensiones Swift dentro de los inicializadores?

Estoy intentando extender mis classs SKScene Swift para crear un Nodo SpriteKit usando las texturas de un atlas cargado y establecer el nombre del nodo al mismo time, salvándome las líneas que necesito usar para cada otro nodo y lo estoy usando como extensión porque no quiero escribir el mismo método en cada class que hago. Además, tengo que crear el método como método de class o obtengo el mismo error en init.

Este es el código de mi extensión:

import SpriteKit internal extension SKScene { func nodeWithTexture(atlas: SKTextureAtlas, texture: String, name: String) -> SKSpriteNode { let nodeTexture = atlas.textureNamed(texture) let node = SKSpriteNode(texture: nodeTexture) node.name = name return node } } 

Ahora, mi problema con esto es que no puedo usar el método en el iniciador de mi escena. Me está dando un error super.init que no entiendo.

Este es el error que obtuve cuando trato de usar la extensión dentro de init antes de la super.init(size: size) .

introduzca la descripción de la imagen aquí

Y este es el error que obtuve cuando trato de usarlo después de la llamada super.init (tamaño).

introduzca la descripción de la imagen aquí

Actualización de preguntas

Soluciono mi problema usando el siguiente enfoque gracias a la respuesta de Nate.

Primero inicializo todas las properties almacenadas en el momento de la statement:

 let background = SKSpriteNode() 

Luego llamo al método de extensión después de la super.init(size: size) y todo está configurado:

 super.init(size: size) background = nodeWithTexture(atlas, texture: "bg", name: "background") 

Un inicializador debe dar valores iniciales a todas las properties almacenadas antes de llamar a super.init() , y debe llamar a super.init() antes de poder llamar a cualquier otro método de instancia.

Puede resolver esto de una de estas dos maneras:

  1. Declare el background como opcionalmente sin envolver implícitamente: nil es un valor inicial aceptable para un opcional, por lo que podría poner su llamada a nodeWithTexture() después de super.init() .

     var background: SKSpriteNode! 
  2. Declare el background como una propiedad perezosa: si siempre va a basarse en un atlas , puede declararlo de esta manera:

     lazy var background: SKSpriteNode = self.nodeWithTexture(self.atlas, texture: "bg", name: "background")