【问题标题】:You can only use the computed variable with both setter and getter to overriding the stored property of the superclass您只能将计算变量与 setter 和 getter 一起使用来覆盖超类的存储属性
【发布时间】:2016-10-28 19:02:21
【问题描述】:

您只能将计算变量与settergetter 一起使用来覆盖超类的存储属性。我通过尝试以下代码得出了这个结论。我不确定我是 100% 正确的。如果我错了,请纠正我。谢谢!

class SuperClass {
    var ID = 2202
}

//Wrong
class SubClass: SuperClass {
    override var ID = 2203
}

//worng
class SubClass: SuperClass {
    override var ID: Int {
        return super.ID + 1
    }
}

//Correct
class SubClass: SuperClass {
    override var ID: Int {
        get {
            return super.ID + 1
        }
        set {

        }
    }
}

【问题讨论】:

  • 你的超类声明它的对象包含一个可变属性ID。由于子类对象可以与子类对象互换,子类对象必须包含一个属性ID,它是 mutable (即使我们在上面的示例中使用“虚拟”设置器:实际上并不改变值) .如果您尝试将子类对象传递给例如,这很明显。 func foo(bar: SuperClass) { bar.ID = 42 };如果允许子类仅使用 getter 覆盖 ID,那么使用此类对象调用 foo(...) 将没有多大意义。

标签: swift class overriding


【解决方案1】:

您不能覆盖超类的存储属性,但可以从子类更改其值:

class SuperClass {
    var ID = 2202
}

class SubClass: SuperClass {
    override init() {
        super.init()
        self.ID = 2203
    }
}

let a = SuperClass()
let b = SubClass()

print(a.ID)
print(b.ID)

【讨论】:

    猜你喜欢
    • 2018-11-08
    • 2021-10-22
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2021-11-06
    • 2014-11-04
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多