Swift中的Swift计算属性是否带有实例变量?

时间:2014-11-01 19:03:09

标签: inheritance swift properties override ivar

我试图在Swift中创建一个计算属性,我需要一个实例变量来保存属性的状态。

当我试图覆盖我的超类中的属性时,会发生这种情况:

class Jedi {
    var lightSaberColor = "Blue"
}


class Sith: Jedi {
    var _color = "Red"
    override var lightSaberColor : String{
        get{
            return _color
        }
        set{
            _color = newValue
        }
    }

}

我使用计算属性覆盖Jedi中存储的属性lightSaberColor,因为这是编译器允许我使用的唯一方法。它还迫使我创建一个getter和setter(这很有意义)。当我遇到麻烦时就是这样。

到目前为止,我发现的唯一方法是定义这个额外且丑陋的var _color。你是一个更优雅的解决方案吗?

我尝试在属性块中定义_color,但它不会编译。

必须有更好的方法!

2 个答案:

答案 0 :(得分:5)

你拥有它的方式是它现在能够正常工作的唯一方式 - 我唯一的改变就是将_color声明为private

根据您的需要,使用willGet和/或didSet处理程序存储属性可能就足够了。

答案 1 :(得分:3)

为什么不在初始化程序中设置它?

class Jedi {
    var lightSaberColor = "Blue"
}

class Sith: Jedi {
    override init () {
        super.init()
        self.lightSaberColor = "Red"
    }
}