我有一种可以这样描述的关系;
一个
Parent
有许多Child
(儿童)
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]()
}
父母需要知道它下面有什么孩子,同样孩子需要知道它所属的父母。
但在Swift游乐场,我注意到有一个潜在的循环参考。
如果我这样做;
var parent = Parent.init(name: "Parent #1")
var child = Child.init(name: "Child #1", parent: parent)
parent.children.append(child)
print (parent)
快捷的游乐场报道;
调试显示父母的孩子,他们反过来显示父母等...
我知道循环引用并不是遗传不好的,但我想尝试在这种描述的关系中避免使用它们。
我只想要第一个父母。
关于StackOverflow上的其他类似问题,我已经读过:
"您的子对象应该是愚蠢的数据对象,他们对父母一无所知并且是自包含的"
"父母只持有子对象,它不会将自身注入其中"
但我不确定这有什么帮助,因为我需要知道一个孩子的父母属于什么。
我的问题是;
当我需要为双方分配关系时,如何避免结构中的循环引用?
答案 0 :(得分:2)
使用类来实现此目的。您的结构正在创建父级的副本,而不是引用。
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
}
}