2014-11-01 26 views
3

我想在Swift中创建一个计算属性,我需要一个实例变量来保存属性的状态。斯威夫特计算的Swift实例变量的属性?

这种情况特别是当我试图重写我的超类的属性:

class Jedi { 
    var lightSaberColor = "Blue" 
} 


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

} 

我重写存储的属性lightSaberColor在绝地与计算性能,因为这是编译器将让唯一途径我。这也迫使我创造一个getter和setter(这是有道理的)。那时我遇到了麻烦。

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

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

有一个更好的方法!

+1

为什么你需要重写属性?这背后肯定有一个原因,我认为这可以为你提供一个正确的答案 – Antonio 2014-11-01 19:30:50

+0

这只是一个例子。真正的问题是如何处理计算属性中的iVar – cfischer 2014-11-01 21:35:04

+0

为什么你打开2个问题来解决同一个问题?关闭一个。 – Shuo 2014-11-02 03:33:50

回答

5

您拥有它的方式是目前唯一可行的方式 - 我所做的唯一更改是将_color声明为private

根据您的需要,与willGet和/或didSet处理程序一起存储属性可能已足够。

+0

这是个好主意,我喜欢。 :-) – cfischer 2014-11-02 12:59:52

3

为什么不把它设置在初始值设定项中?

class Jedi { 
    var lightSaberColor = "Blue" 
} 

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