2014-10-05 2 views
2

Я пытаюсь выполнить следующий код, но получаю ошибку компиляции. Я хотел бы инициализировать без параметров, потому что все установлены в значения по умолчанию, но мне все еще нужно использовать назначенный инициализатор суперкласса. Я хочу, чтобы быть в состоянии назвать AimNode() для нового AimNodeConvenience Init в Swift с меньшими параметрами

class AimNode: SKSpriteNode { 

    override init() { 
     super.init(imageNamed: "aim") 
    } 

    required init(coder aDecoder: NSCoder) { 

    } 
} 
+1

Какая ошибка компилятора вы получаете? – Undo

ответ

2

Ваш подкласс (AimNode) необходимо позвонить в назначенный инициализатору вашего суперкласса (SKSpriteNode). Правила, как объяснены в Initializer Chaining разделе быстрого руководства по программированию являются:

Для упрощения отношений между назначенными и удобством инициализаторами, Swift применяет следующие три правил для делегирования вызовов между инициализаторами:

Правило 1 Назначенный инициализатор должен вызывать назначенный инициализатор из своего непосредственного суперкласса.

Правило 2 Инициализатор удобства должен вызвать другой инициализатор от того же класса.

Правило 3 Инициализатор удобства должен в конечном счете вызвать назначенный инициализатор .

Соответствующий назначенный инициализатор SKSpriteNode является:

init(texture: SKTexture!, color: UIColor!, size: CGSize) 

Итак, вам нужно создать SKTexture, выбрать цвет и установить размер. К счастью, это довольно просто:

class AimNode: SKSpriteNode { 

    // NOTE: I arbitrarily picked white for the color. I believe that's the default, but I don't know for sure. 
    override init() { 
     let texture = SKTexture(imageNamed: "aim") 
     super.init(texture: texture, color: UIColor.whiteColor(), size: texture.size()) 
    } 

    // NOTE: You'll have to implement this too, if you don't have anything custom, you can just call the super implementation 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 
} 
+0

спасибо, я думал, что super.init (imageNamed: "aim") был назначенным инициализатором. –

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