当我不想初始化我的 B 对象时出现错误。
我的错误是:在 super.init 初始化 self 之前在属性访问“name”中使用“self”
class A {
let name = "myName";
}
class B:A {
let point: ObjectWithName;
init() {
self.point = ObjectWithName(name); // error here
super.init();
}
}
感谢您的帮助!
最佳答案
问题是您正在访问在父类(super class)中声明的 name
。但是父类(super class)还没有被初始化(它将在 super.init()
之后)。
所以这是一个逻辑问题。
解决方案#1
您可以将point
声明为lazy
,这样它将在之后整个init
进程执行已经完成,除非你之前调用它。
struct ObjectWithName {
let name: String
}
class A {
let name = "myName";
}
class B: A {
lazy var point: ObjectWithName = { ObjectWithName(name:self.name) }()
}
解决方案#2
在 A
中,您可以将 name
定义为 static
class A {
static let name = "myName";
}
class B:A {
let point: ObjectWithName;
override init() {
self.point = ObjectWithName(name: B.name)
super.init();
}
}
关于ios - 继承初始化类中的Swift错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623989/