试图在swift中初始化超类属性但遇到错误

时间:2016-08-17 15:16:35

标签: swift

我是swift的新手,我目前正在学习初始化器。我遇到了覆盖父类初始化程序的问题。 我得到一个编译器错误“在super init初始化self之前,在属性访问'ImageTexture'中使用'self'”

我希望在调用特殊徽章类时使用新图像

这是我得到错误的特殊徽章类

class SpecialBadge: Badge {

    enum BadgeAnimation: Int {
        case GrowAndShrink = 0, Rotate, Shake
    }

    override init(requestType: UDRequestType) {

        let animation = BadgeAnimation(rawValue: Int(arc4random_uniform(3)))
        self.imageTexture = SKTexture(imageNamed: "BadgeTeal")
        super.init(requestType: requestType)


        switch animation! {
        case .GrowAndShrink:
            growShrink()

        case .Rotate:
            rotate()

        case .Shake:
            shake()
        }
    }
}

我在网上致电时收到错误:

self.imageTexture = SKTexture(imageNamed: "BadgeTeal")

在致电super.init(requestType: requestType)

之前

我的父班;

class Badge: SKSpriteNode {

    var requestType: UDRequestType
    var imageTexture: SKTexture?

    init(requestType: UDRequestType) {
        self.requestType = requestType

        if let texture = imageTexture {
            super.init(texture: texture, color: UIColor.clearColor(), size: CGSizeMake(48, 48))
        } else {
            let newTexture = SKTexture(imageNamed: "BadgeMagenta")
            super.init(texture: newTexture, color: UIColor.clearColor(), size: CGSizeMake(48, 48))
        }
    }

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

我无法弄清楚如何初始化imageTexture,以便在调用SpecialBadge中的初始化程序之前可以使用不同的图像,任何帮助都将非常感激

1 个答案:

答案 0 :(得分:2)

这只是你做事的顺序问题。这是非法的:

self.imageTexture = SKTexture(imageNamed: "BadgeTeal")
super.init(requestType: requestType)

这是合法的:

super.init(requestType: requestType)
self.imageTexture = SKTexture(imageNamed: "BadgeTeal")

规则是你必须在对你自己的类做任何特殊事情之前完成超类的初始化。