【问题标题】:How to create an immutable lazy property? [duplicate]如何创建不可变的惰性属性? [复制]
【发布时间】:2021-01-15 09:02:37
【问题描述】:

我有 2 节课。 Child 类需要在其初始化程序中引用 Parent

class Child {
     init(parent: Parent)
}

class Parent {
   init()
   public lazy var child: Child = Child(parent: self)
}

由于我不能在 Parent 的 init() 中使用 self 来构造其 child 属性。我为child 属性创建了一个lazy var,如下所示:

public lazy var child: Child = Child(parent: self)

但我需要将其设为 var 才能将其标记为懒惰。有没有办法使child 不可变并且能够在调用child 属性时构造它一次?

【问题讨论】:

  • 该方法无论如何都不好,因为如果两个属性都很强,它会导致保留周期。将Parent中的child属性声明为weak var child : Child!,并在Child的初始化器中赋值

标签: swift


【解决方案1】:

简而言之,这是不可能的。根据 Swift 文档:

常量属性在初始化之前必须始终有一个值 完成,因此不能声明为惰性。

链接:Swift lazy documentation

您可以将child 声明为private(set),因此它只能在您的班级内部进行更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多