我不能初始化内部类。 IDE我返回错误,即“在初始化所有存储的属性之前使用了'self'。我附加了看错可以的图片
答案 0 :(得分:1)
编译器是正确的,您正在尝试将self
传递给Customer
的构造函数,然后初始化所有存储的属性,因为SESSION
直到{{ 1}}对象已初始化,但是需要Session
-您的两个要求是互斥的。
您可能需要重新考虑您的体系结构;如果没有其他问题,将self
到Customer
的引用与Session
到Session
的引用结合起来,将为您提供保留周期和内存泄漏。
如果要使用当前体系结构,可能最好将Customer
的{{1}}属性设置为弱选项,以避免初始化问题和保留周期;
Customer
您可以使Session
成为隐式解包的可选内容,以避免每次引用它时都需要显式解包,但是如果发布class Customer {
let session: Session
let auth: Auth
init() {
self.auth = Auth()
self.session = Session()
session.customer = self
}
class Session {
weak var customer: Customer?
}
}
,则可能会导致崩溃或未设置:
customer
就样式而言,Swift属性和变量应以小写字母开头并使用驼峰式大小写,因此customer
,class Session {
weak var customer: Customer!
}
和auth
而非session
,userID
和AUTH
。
答案 1 :(得分:0)
您不能创建递归结构化类。
class OuterClass {
class InnerClass {
let outerClass: OuterClass
init(outerClass: OuterClass) {
self.outerClass = outerClass
}
}
let innerClass: InnerClass
init() {
self.innerClass = InnerClass(outerClass: self)
}
}