我想实现这样的事情:
class A {
var a, b, c, d: Int
init() {
reset()
}
func reset() {
a = 1
b = 2
c = 3
d = 4
}
func blablabla() {
...
}
}
无法编译,错误消息:
在初始化之前使用变量“self.a”
我必须将代码从reset()
复制到init()
,这是没有意义的。
是缺陷还是有其他方法可以做到?
答案 0 :(得分:11)
不,这不是缺陷,在初始化所有存储的属性之前,只能在初始化程序中引用self
,并且已调用超类初始值设定项(如果有的话)。
在你的情况下,在方法中进行初始化似乎是合法的,并从初始化程序调用它,但不幸的是它不起作用。
可能的解决方案:
在调用reset
之前使用假值初始化属性:
init() {
self.a = 0
self.b = 0
self.c = 0
self.d = 0
reset()
}
或
var a = 0
var b = 0
var c = 0
var d = 0
init() {
reset()
}
答案 1 :(得分:3)
给出a,b,c和d默认值,特别是如果您要立即更改它们。