zar*_*don 2 struct circular-reference swift
我的关系可以这样描述;
一个
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]()
}
Run Code Online (Sandbox Code Playgroud)
父级需要知道它下面有哪些子级,同样子级也需要知道它属于哪个父级。
但在 Swift 游乐场中,我注意到存在潜在的循环引用。
如果我做;
var parent = Parent.init(name: "Parent #1")
var child = Child.init(name: "Child #1", parent: parent)
parent.children.append(child)
print (parent)
Run Code Online (Sandbox Code Playgroud)
迅捷游乐场报道;
调试显示父母孩子,这又显示父母,等等......
我知道循环引用并不是天生的坏事,但我想在这种描述的关系中尽量避免它们。
我只想要第一个父母。
关于 StackOverflow 上的其他类似问题,我读到:
“你的子对象应该是愚蠢的数据对象,它们对父对象一无所知并且是独立的”
“父对象只是持有子对象,它不会将自己注入到子对象中”
但我不确定这有什么帮助,因为我需要知道孩子属于哪个父母。
我的问题是;
当我需要向双方分配关系时,如何避免结构中的循环引用?
为此使用类。您的结构正在创建父级的副本,而不是引用。
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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2518 次 |
| 最近记录: |