错误:"属性' self.gameArea'没有在super.init电话"初始化

时间:2016-11-05 10:18:21

标签: sprite-kit swift3 init

我收到了标题中写的错误。我对这一切都很陌生。任何帮助赞赏。

这是GameScene.swift文件:

class GameScene: SKScene {

let player = SKSpriteNode(imageNamed: "shuttle")

let bulletSound = SKAction.playSoundFileNamed("torpedo.mp3", waitForCompletion: false)

let gameArea: CGRect

override init(size: CGSize) {

    let maxRatio: CGFloat = 16.0/9.0
    let playableWidth = size.height / maxRatio
    let margin = (size.width - playableWidth) / 2

    gameArea = CGRect(x: margin - size.width / 2, y: size.height / 2, width: playableWidth, height: size.height)

    super.init(size: size)

}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

1 个答案:

答案 0 :(得分:2)

我建议你阅读initialization process。 Swift预先形成两步初始化。第一阶段是所有存储属性的初始化。此外,Swift编译器执行少量安全检查以确保正确执行两个阶段初始化。这来自文档:

  

安全检查1

     

指定的初始化程序必须确保在委派最多a之前初始化其类引入的所有属性   超类初始化器。

因此,您可以在初始化程序中初始化您的属性:

required init?(coder aDecoder: NSCoder) {
        self.gameArea = CGRect()
        super.init(coder: aDecoder)
    }

或在属性声明(并可选地将其声明为var):

var gameArea = CGRect()

如果你没有把它变成var,在初始化之后(在声明时)你将无法在以后更改它。初始化初始化程序中的属性时也是如此。如果是常量,则无法进行进一步修改。