错误:使用' self'在财产访问&纹理'在super.init初始化自我之前

时间:2015-08-16 05:11:42

标签: ios swift

我是swift的新手,我正在努力学习 创造一个简单的纸牌游戏。我从视频中输入了完全相同的代码。 但xcode显示错误"使用' self'在财产访问&纹理'在super.init初始化自我之前#34; 谢谢你的帮助!

import SpriteKit

class Card: SKSpriteNode {
    var rank: Int
    var suit: String
    var imageNameUp: String
    var textureUp: SKTexture
    var textureDown: SKTexture

init(rank: Int, suit: String, faceUp: Bool){

    self.rank = rank
    self.suit = suit
    self.imageNameUp = "\(suit)_\(rank)"
    self.textureUp = SKTexture(imageNamed: imageNameUp)
    self.textureDown = SKTexture(imageNamed: "cardback")



    if faceUp {
      self.texture = textureUp  //error 
    } else {
      self.texture = textureDown  //error
    }

    super.init(texture: texture, color: nil, size: texture!.size())  //error causes when I try to unwrap size: texture!.size()

}

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

func flip(){
    self.texture = textureUp
}

}

1 个答案:

答案 0 :(得分:4)

使用setTexture:是对超级类SKSpriteNode的texture(Obj-C中的super.init)的设置者的调用。

如果要访问超类属性,则必须在 调用super.init之后执行

在这种情况下,我认为你根本不需要修改超类属性,因为纹理被传递给let texture = faceUp ? textureUp : textureDown super.init(texture: texture, ... 。您可以使用局部变量:

let

我强烈建议您使用var而不是init来处理大部分属性。它们不需要在let之后更改,并且使用{{1}}告诉Swift他们无法更改更安全。