首页 > 解决方案 > Swift - 在超类的变量更改时调用子类方法

问题描述

我有一个超类 A 和子类 B。两者都是 ViewController。代码如下:

class A {
    var a : Bool = false
}

class B : A {
    var b : Int = 10
    func changeB() {
        b = 20
    }
}

所以,A 类中有一个变量 a。每当它改变时,它应该改变 B 类的变量 b,即它应该调用一个方法 changeB() 来更新 b。

实现此目的的一种方法是使用事件调用将更新b的方法changeB()

有没有其他方法可以实现相同的目标?

这只是供其他人理解的模板。实际问题是 - A 类由地图视图和列表视图组成,它处理两个视图之间的切换。B 类继承 A 并在视图顶部有按钮,该按钮仅应显示在列表视图中,而不应显示在地图视图中。

所以,当视图在列表视图和在类 A中处理的地图视图之间切换时,我想更改我在B 类中的button.isVisible属性。

标签: iosswiftinheritancesubclasssuperclass

解决方案


您需要a在子类中覆盖,以便您可以changeB从其设置器中调用。

class B : A {
    var b : Int = 10
    override var a: Bool {
        set {
            super.a = newValue
            self.changeB()
        }
        get {
            return super.a
        }
    }

    func changeB() {
        b = 20
    }
}

推荐阅读