我想写这段代码,但是它不起作用。private var a: Int set(value) { field = a // Code }init { a = 2}当我定义时,我必须初始化变量......
我想写这段代码但是不起作用。
private var a: Int
set(value) {
field = a
// Code
}
init {
a = 2
}
声明变量时必须初始化变量。为什么会发生这种情况?我该如何解决?
您的属性有一个自定义设置器,当您 a = 2
中 init
,该设置器的代码将运行。
该代码可能非常复杂,并且编译器无法确定它最终是否会设置属性的支持字段的值。在您的代码示例中,它将设置支持字段,并且您的属性将处于有效状态。
但是,您也可以使用自定义设置器,例如这个:
private var a: Int
set(value) {
if (value > 0) {
field = value
}
}
在块中调用此方法 init
不一定足够,因为它可能会使属性处于未初始化状态。
为了防止这种情况,当使用自定义设置器时,编译器会要求您在声明时为属性设置一个值。