ios – Swift重写实例变量

我知道这个答案已经以其他形式发布了,但是我想了解更多关于在 swift中覆盖实例变量的信息.

假设我有这个代码

class BaseView:UIView{
 let someVariable:Int = 1
 // do some work with someVariable
}

class ExtendedView:BaseView{
 let someVariable:Int = 2
}

好.从我读的,常数需要一个覆盖前缀.其他答案说我应该宣布安抚者和吸烟者?为什么?我真的不在乎这两个.我只需要替换值.我不能真正使用init override,因为我从UIView继承,这可能是相当危险的(我想).

欢迎任何建议.

解决方法

正如你所说,你不能简单地重新定义一个子类中的常量(毕竟这是一个常量).你得到的错误是“不能覆盖存储的属性”.它似乎有可能覆盖一个var,但是,当我改变一些变量为var一些变量我得到“含糊的使用’someVariable’”当我访问它在子类(注意 – 同样的事情发生,无论我是否使用覆盖或不).

最初的顾问建议的最简单的解决方案是使用吸气剂.这真的是一个功能,所以你可以高兴地覆盖它,支持变量将为您管理,如果您不提供setter,它将是常量:

class BaseView: UIView {
    var someVariable: Int { get { return 1 } }
    // do some work with someVariable
}

class ExtendedView: BaseView {
    override var someVariable: Int { get { return 2 } }
}

let a = BaseView()
a.someVariable // 1
let b = ExtendedView()
b.someVariable // 2

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...