Swift: 在 init 中调用 self 方法
Swift: Call self method inside init
我想实现这样的东西:
class A {
var a, b, c, d: Int
init() {
reset()
}
func reset() {
a = 1
b = 2
c = 3
d = 4
}
func blablabla() {
...
}
}
无法编译,错误信息:
Variable "self.a" used before being initialized
我必须将代码从 reset()
复制到 init()
。
没有意义
这是缺陷还是有其他方法?
给 a、b、c 和 d 默认值,特别是如果您要立即更改它们。
不,这不是缺陷,只是 self
不能在初始化程序中引用,直到所有存储的属性都已初始化,并且已调用超级 class 初始化程序(如果有)。
在你的情况下,在方法中进行初始化并从初始化程序中调用它似乎是合法的,但不幸的是它不起作用。
可能的解决方案:
- 使属性可选或隐式展开(不鼓励,除非你真的需要它们可选)
在调用之前用假值初始化属性 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()
}
我想实现这样的东西:
class A {
var a, b, c, d: Int
init() {
reset()
}
func reset() {
a = 1
b = 2
c = 3
d = 4
}
func blablabla() {
...
}
}
无法编译,错误信息:
Variable "self.a" used before being initialized
我必须将代码从 reset()
复制到 init()
。
这是缺陷还是有其他方法?
给 a、b、c 和 d 默认值,特别是如果您要立即更改它们。
不,这不是缺陷,只是 self
不能在初始化程序中引用,直到所有存储的属性都已初始化,并且已调用超级 class 初始化程序(如果有)。
在你的情况下,在方法中进行初始化并从初始化程序中调用它似乎是合法的,但不幸的是它不起作用。
可能的解决方案:
- 使属性可选或隐式展开(不鼓励,除非你真的需要它们可选)
在调用之前用假值初始化属性
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() }