Swift - 如何在具有 parent 和 child 关系的结构中避免循环引用?

Swift - How to avoid circular references in structs with parent and child relationships?

我有一段可以这样描述的关系;

One Parent has many Child (Children)

struct Parent {
    var name: String
    var cost: Int
    var productionCost: Int
    var income: Int
    var children: [Child] = [Child]()

    init(name: String) {
        self.name = name
    }
}

struct Child {
    var name: String
    var parent: Parent?
    var owner: Player?
}

// not used but the intention is to so a player can own a child
class Player {
   var name:
   var cards: [Child] = [Child]()
}

parent需要知道它下面有什么child人,同样child需要知道它属于什么parent。

但在 Swift 游乐场中,我注意到存在潜在的循环引用。

如果我这样做;

var parent = Parent.init(name: "Parent #1")
var child = Child.init(name: "Child #1", parent: parent)

parent.children.append(child)

print (parent)

swift游乐场报道;

调试显示parents children,依次显示parent,等等...

我知道循环引用在继承上并不坏,但我想在这种描述的关系中尽量避免它们。

我只想要第一个parent。

关于 Whosebug 上的其他类似问题,我读到了:

但我不确定这有什么帮助,因为我需要知道 parent 一个 child 属于什么。

我的问题是;

当我需要为两侧分配关系时,如何避免结构中的循环引用?

为此使用 类。您的结构正在创建父级的副本,而不是引用。

class Parent {
    var name: String
    var children: [Child] = [Child]()

    init(name: String) {
        self.name = name
    }
}

class Child {
    var name: String
    weak var parent: Parent?
    init(name:String,parent: Parent) {
        self.name = name
        self.parent = parent
    }
}