ios - 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属性。
解决方案
您需要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
}
}
推荐阅读
- angular - div[id]=function 不能调用相应的打字稿函数?
- mongodb - Mongo - Return scalar when select result contains only one field
- java - 在 DigitalPersona U.are.U SDK 中调用 Reader.Capture() 不返回
- prestashop - 在 cart-summary-totals.tpl 中包含模块的 tpl 文件
- android - 如果之前被拒绝许可,如何通过 USB 调试启用 apk 安装?
- docker - docker 镜像可以像 rpm noarch 一样跨平台吗?
- java - 添加一个按钮以转到另一个 jframe
- node.js - Cognito - 如何在与客户端从(通过放大)获得令牌的子域不同的子域上对 nodejs 后端的客户端进行身份验证?
- c - 我需要多少个信号量才能订购在两个进程之间拆分的一组函数?
- amazon-elastic-beanstalk - 在 Elastic Beanstalk 中升级到 Linux2 时的 get-config 密钥更改