Swift属性观察不会被覆盖

李在勋

我用属性重写编写了类继承。我发现观察存储属性不像其他重写那样工作。

这些类具有存储的属性和计算的属性以进行比较。

class Parent {
    var storedProp : Int! {
        didSet {
            print("Parent stored property didSet")
        }
    }
    var calcProp : Int {
        print("Parent calculated property get")
        return 100
    }
}

class Child : Parent {
    override var storedProp : Int! {
        didSet {
            print("Child stored property didSet")
        }
    }

    override var calcProp : Int {
        print("Child calculated property get")
        return 101
    }
}

当我实例化Child对象并获得计算属性时。子类中的属性将覆盖父类的属性,但不起作用。

var obj = Child()
let value = obj.calcProp

我期望在财产观察上也会发生同样的事情,但是对孩子和父母的财产观察都起作用。看起来像传播。

obj.storedProp = 999

// Parent stored property didSet
// Child stored property didSet

它是故意的吗?。以及如何防止传播?

西蒙

Swift编程语言(Swift 2.2)的“继承”部分将“覆盖属性观察器”描述为“添加属性观察器”

覆盖属性观察者

您可以使用属性覆盖将属性观察器添加到继承的属性...

在以下示例中,如果子类能够覆盖didSetcurrentSpeed属性的观察者AutomaticCar

class AutomaticCar {
    var currentSpeed: Double {
        didSet {
            gear = Int(currentSpeed / 10.0) + 1
        }
    }
}

didSet子类中in会阻止更新gear属性,这可能会破坏超类AutomaticCar的设计行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift属性观察不会被覆盖

来自分类Dev

继承的类属性“ DisplayAttribute”不会被覆盖吗?

来自分类Dev

Magento Local Block不会被覆盖

来自分类Dev

Bootstrap CSS不会被覆盖吗?

来自分类Dev

sftp get -r不会被覆盖

来自分类Dev

使用bootstrap sass,某些变量不会被覆盖

来自分类Dev

在JS库中使用事件,而不会被覆盖

来自分类Dev

使用bootstrap sass,某些变量不会被覆盖

来自分类Dev

为什么flex-basis属性会被覆盖?

来自分类Dev

为活动实现View.OnClickListener-方法不会被覆盖

来自分类Dev

browser.download.manager.showWhenStarting可能不会被覆盖

来自分类Dev

为什么在函数内部创建同名变量时函数参数不会被覆盖?

来自分类Dev

Pylint W0223:方法...在类中是抽象的...但不会被覆盖

来自分类Dev

为活动实现View.OnClickListener-方法不会被覆盖

来自分类Dev

使用id选择器时css裁定不会被覆盖

来自分类Dev

CSS3意外行为CSS不会被覆盖

来自分类Dev

导入同名功能会被覆盖吗?

来自分类Dev

财产子女会被覆盖吗?

来自分类Dev

为什么提示会被覆盖?

来自分类Dev

为什么数组会被覆盖?

来自分类Dev

为什么有些数组值会被覆盖,而有些则不会呢?的PHP

来自分类Dev

父CSS属性被覆盖

来自分类常见问题

为什么我的状态迭代会被覆盖?

来自分类Dev

即使正确设置Google Maps InfoWindow的宽度也会被覆盖

来自分类Dev

shell登录后,为什么$ PATH会被覆盖?

来自分类Dev

调用printf时,为什么EDX的值会被覆盖?

来自分类Dev

为什么我的状态迭代会被覆盖?

来自分类Dev

即使使用!important,字体大小也会被覆盖

来自分类Dev

ArrayList中的所有数组都会被覆盖

Related 相关文章

热门标签

归档