我正在使用Swift中的macOS项目,并且在我已经完成的几个类中重写变量时遇到了很多麻烦。在Cannot override with a stored property 'texture'
中,Xcode在行上显示错误override var texture: SKTexture?
;
public class classOne: SKSpriteNode {
required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// Other functions
}
这是我正在使用的一些代码。
class classTwo: classOne {
override var texture: SKTexture? // Cannot override with a stored property 'texture'
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// Some other functions
}
第二节课;
classTwo
我确实计划为{{1}}实际定义一个特定的纹理,但是现在我甚至无法完成这项工作..提前感谢,我很感激任何解决这个问题的帮助!
答案 0 :(得分:3)
修改
@ Knight0fDragon是对的,更好的方法是使用super.texture
class classTwo: classOne {
override var texture:SKTexture? {
get {
return super.texture
}
set {
super.texture = newValue
}
}
}
要覆盖属性,您需要初始化它。换句话说,给它一个初始值。如果你不想要,这是一个解决方法:
class classTwo: classOne {
var _texture:SKTexture
override public var texture: SKTexture? {
get {
return _texture
}
set {
_texture = newValue!
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// Some other functions
}
答案 1 :(得分:0)
试试这个
override var texture: SKTexture? {
get {
return SKTexture()
}
set {
}
}
显然返回了一些更有用的东西。
答案 2 :(得分:0)
从我的所有阅读中,我不认为压倒是你想要的方法,你想创建一个方便的初始
class classTwo: classOne {
convenience init()
{
let texture = SKTexture(imageNamed:"myImage")
self.init(texture,.white,texure.size)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder:aDecoder)
}
}
然后使用它,你只需要做classTwo()
(注意,这还没有经过测试,所以我可能有拼写错误,但一般概念在这里)
答案 3 :(得分:0)
在您的子类中,您需要这样做。
override var texture:SKTexture? {
get {
return super.texture
}
set {
super.texture = newValue
}
}