我试图在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
,但它不会编译。
必须有更好的方法!
答案 0 :(得分:5)
你拥有它的方式是它现在能够正常工作的唯一方式 - 我唯一的改变就是将_color
声明为private
。
根据您的需要,使用willGet
和/或didSet
处理程序存储属性可能就足够了。
答案 1 :(得分:3)
为什么不在初始化程序中设置它?
class Jedi {
var lightSaberColor = "Blue"
}
class Sith: Jedi {
override init () {
super.init()
self.lightSaberColor = "Red"
}
}