ios – Swift重写实例变量

前端之家收集整理的这篇文章主要介绍了ios – Swift重写实例变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道这个答案已经以其他形式发布了,但是我想了解更多关于在 @L_301_0@中覆盖实例变量的信息.

假设我有这个代码

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
原文链接:https://www.f2er.com/iOS/337547.html

猜你在找的iOS相关文章