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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...