我在课堂上有两个内部班级,但我不能迅速开始上班

时间:2019-02-09 09:27:56

标签: ios swift

我不能初始化内部类。 IDE我返回错误,即“在初始化所有存储的属性之前使用了'self'。我附加了看错可以的图片 enter image description here

2 个答案:

答案 0 :(得分:1)

编译器是正确的,您正在尝试将self传递给Customer的构造函数,然后初始化所有存储的属性,因为SESSION直到{{ 1}}对象已初始化,但是需要Session-您的两个要求是互斥的。

您可能需要重新考虑您的体系结构;如果没有其他问题,将selfCustomer的引用与SessionSession的引用结合起来,将为您提供保留周期和内存泄漏。

如果要使用当前体系结构,可能最好将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属性和变量应以小写字母开头并使用驼峰式大小写,因此customerclass Session { weak var customer: Customer! } auth而非sessionuserIDAUTH

答案 1 :(得分:0)

您不能创建递归结构化类。

  • 需要一个内部类来初始化外部类。
  • 需要一个外部类来初始化内部类。
class OuterClass {
    class InnerClass {
        let outerClass: OuterClass
        init(outerClass: OuterClass) {
            self.outerClass = outerClass
        }
    }

    let innerClass: InnerClass

    init() {
        self.innerClass = InnerClass(outerClass: self)
    }
}