我想写这段代码,但它不起作用。
private var a: Int
set(value) {
field = a
// Code
}
init {
a = 2
}
我必须在声明变量时对其进行初始化。为什么会发生这种情况?我该如何解决?
您的属性有一个自定义设置器,当您调用时a = 2
in the init
块,该设置器的代码将运行。
该代码可能任意复杂,并且编译器无法确定它最终是否会设置属性的支持字段的值。在您的代码示例中,它将设置支持字段,并且您的属性将处于有效状态。
但是,您也可以有一个自定义设置器,如下所示:
private var a: Int
set(value) {
if (value > 0) {
field = value
}
}
在一个init
block 不一定就足够了,因为它可能会使属性处于未初始化状态。
为了防止这种情况,编译器会要求您在属性声明时设置一个值,而不是在使用自定义设置器时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)