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

cfi*_*her 4 inheritance overriding properties ivar swift

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

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

class Jedi {
    var lightSaberColor = "Blue"
}


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

}
Run Code Online (Sandbox Code Playgroud)

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

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

我尝试_color在属性块内部进行定义,但它不会编译.

必须有更好的方法!

Nat*_*ook 5

你拥有它的方式是它现在可以工作的唯一方式 - 我要做的唯一改变是声明_colorprivate.

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