gpt4 book ai didi

ios - 错误 : Use of 'self' in property access 'texture' before super. init 初始化自身

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:14 26 4
gpt4 key购买 nike

我是 swift 的新手,我正在尝试通过以下方式学习 swift创建一个简单的纸牌游戏。我从视频中输入了完全相同的代码。但是 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 texture (setTexture: 在 Obj-C 中)。

如果您想访问父类(super class)属性,您必须调用 super.init 后这样做。

在这种情况下,我认为您根本不需要修改父类(super class)属性,因为纹理正在传递给 super.init。您可以使用局部变量:

let texture = faceUp ? textureUp : textureDown
super.init(texture: texture, ...

我还强烈建议您对大多数属性使用 let 而不是 var。它们不需要在 init 之后更改,使用 let 告诉 Swift 它们不能更改更安全。

关于ios - 错误 : Use of 'self' in property access 'texture' before super. init 初始化自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32032046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com