父母/子女关系 - 父母应该软弱吗?

Parent/Child relationship - should parent be weak?

提问人:HangarRash 提问时间:7/5/2023 最后编辑:HangarRash 更新时间:7/24/2023 访问量:216

问:

通常,在父/子关系中,类中的属性需要为 。例如:parentChildweak

class Parent {
    var children: [Child]
}

class Child {
    weak var parent: Parent?
}

这样做是为了避免参考周期。

如果我想将它们与 SwiftData 一起使用,我认为它会是:

@Model
class Parent {
    @RelationShip(inverse: \Child.parent)
    var children: [Child]
}

@Model
class Child {
    weak var parent: Parent?
}

但是,当查看 WWDC23 中的一些示例代码(Backyard Birds:使用 SwiftData 和小部件构建应用程序)时,我没有看到任何用处。weak

例如,除其他外,还有名为 、 和 的类。以下是课程的相关摘录:PlantPlantSpeciesBackyard

@Model public class Plant {
    @Attribute(.unique) public var id: String
    public var creationDate: Date
    public var species: PlantSpecies!
    public var backyard: Backyard?
    public var variant: Int
...

@Model public class Backyard {
    @Attribute(.unique) public var id: String
    public var name: String
    
    @Relationship(inverse: \Plant.backyard)
    public var leadingPlants: [Plant]
    
    @Relationship(inverse: \Plant.backyard)
    public var trailingPlants: [Plant]
...

@Model public class PlantSpecies {
    @Attribute(.unique) public var id: String
    public var parts: [PlantPart]
    
    @Relationship(.cascade, inverse: \Plant.species)
    public var plants: [Plant]
...

为什么 和 在类中没有设置为 ?这是疏忽还是 SwiftData 出了什么问题?speciesbackyardPlantweak

父子 弱引用 swift-data

评论

0赞 Joakim Danielson 7/5/2023
我对此没有明确的答案,但不是说 SwiftData 会为您管理关系,如果您将父项分配给子项,那么 SwiftData 将处理相反的情况,以便将子项添加到子项数组中。还有断层的逻辑,这里也很重要。

答: 暂无答案