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

Ios 错误:使用';自我';在财产访问中';纹理';在super.init初始化self之前,ios,swift,Ios,Swift,我是斯威夫特的新手,我正在努力学习斯威夫特 创建一个简单的纸牌游戏。我从视频中输入了完全相同的代码。 但是xcode显示错误“在super.init初始化self之前在属性访问“texture”中使用“self” 谢谢你的帮助 import SpriteKit class Card: SKSpriteNode { var rank: Int var suit: String var imageNameUp: String var textureUp: SKTex

我是斯威夫特的新手,我正在努力学习斯威夫特 创建一个简单的纸牌游戏。我从视频中输入了完全相同的代码。 但是xcode显示错误“在super.init初始化self之前在属性访问“texture”中使用“self” 谢谢你的帮助

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
}

}使用
self.texture=…
调用超类SKSpriteNode的setter for(
setTexture:
在Obj-C中)

如果要访问超类属性,必须在调用
super.init
访问

在本例中,我认为您根本不需要修改超类属性,因为纹理正在传递给
super.init
。您可以使用局部变量:

let texture = faceUp ? textureUp : textureDown
super.init(texture: texture, ...
我还强烈建议对大多数属性使用
let
而不是
var
。它们不需要在
init
之后更改,使用
let
告诉Swift它们不能更改更安全