A:f()只是打印 HeHe 并且它不会使用任何属性(在这种情况下只有一个:a。)或任何'自我' - 编译指出的东西。所以我想知道编译器是否意味着self.f()?
class A {
var a: String
init(a: String) {
f()
self.a = a
}
func f() {
print("HeHe")
}
}
错误消息:
PlayGround.playground:4:9: error: use of 'self' in method call 'f' before all stored properties are initialized
f()
^
答案 0 :(得分:1)
如果您没有使用函数调用self
撰写f
,那么它并不意味着self
从f
开始引用init
仍然是实例方法,所以在f()
之后必须在初始化所有实例属性之后调用它,这意味着在初始化类的实例之后。因此,只需在initialized
实例属性a
后调用class A {
var a: String
init(a: String) {
self.a = a
f()
}
func f() {
print("HeHe")
}
}
。
{{1}}
答案 1 :(得分:1)
在使用struct或class之前,必须初始化每个存储的属性(默认值或使用init' s)。期。在初始化类之前,您正在调用类方法。即使该方法不使用或访问类属性。