【问题标题】:Swift computed properties in Swift with instance variable?Swift中带有实例变量的Swift计算属性?
【发布时间】:2014-12-28 19:06:58
【问题描述】:

我正在尝试在 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(这是有道理的)。那就是我遇到麻烦的时候。

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

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

一定有更好的方法!

【问题讨论】:

  • 为什么需要覆盖属性?这背后一定有原因,我认为这有助于为您提供正确的答案
  • 这只是一个例子。真正的问题是如何处理计算属性中的 iVars
  • 为什么要对同一个问题提出 2 个问题?关闭一个。
  • 这不是同一个问题。请阅读问题。

标签: inheritance swift properties overriding ivar


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    为什么不直接在初始化器中设置呢?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-27
      • 2014-07-27
      • 1970-01-01
      • 2015-01-19
      • 2018-06-11
      • 2016-09-04
      • 2019-02-14
      • 2016-08-02
      相关资源
      最近更新 更多