Как я могу создать объект подкласса? - PullRequest
0 голосов
/ 13 февраля 2019

К сожалению, я снова и снова получаю сообщение об ошибке 'self' used in property access 'healthPoints' before 'super.init' call с моим кодом:

Первый класс Юнит

import UIKit
import SpriteKit

class Unit {

//    var gameScene : GameScene!

    var healthPoints = 10
    var damage = 5
    var movement = 1

    init(pHealthPoints: Int, pDamage: Int,pMovement: Int) {

        self.healthPoints = pHealthPoints
        self.damage = pDamage
         self.movement = pMovement
    }


    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

Подкласс Рыцарь

import UIKit
import SpriteKit

class Knight: Unit {

    override init(pHealthPoints: Int, pDamage: Int, pMovement: Int) {

        self.healthPoints = pHealthPoints
        self.damage = pDamage
        self.movement = pMovement

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

Где именно я должен написать super в подклассе?

Как я могу получить доступ к классу Unit или классу Knight через GameScene.swiftили создать объект класса Knight?

За каждый ответ я очень благодарен

1 Ответ

0 голосов
/ 13 февраля 2019

Вам просто нужно вызвать super.init, прежде чем назначать какие-либо значения свойствам вашего подкласса.Также нет необходимости реализовывать init?(coder aDecoder: NSCoder).Также имейте в виду, что ваш переопределенный метод init на самом деле не делает ничего другого, кроме супер-реализации, поэтому нет смысла переопределять его.

class Knight: Unit {

    override init(pHealthPoints: Int, pDamage: Int, pMovement: Int) {
        super.init(pHealthPoints: pHealthPoints, pDamage: pDamage, pMovement: pMovement)
        self.healthPoints = pHealthPoints
        self.damage = pDamage
        self.movement = pMovement
    }
}
...