给出以下代码:
class Node {
var value: Int
var left: Node?
var right: Node?
init (value: Int) {
self.value = value
}
}
root = Node(value: 200)
然后,以下代码将新节点分配给root.left:
var temp1 = root
temp1!.left = Node(value: 400)
但是以下内容没有为root.right分配新节点:
var temp2 = root!.right
temp2 = Node(value: 300)
大概在最后一个代码片段根目录中!.right按值分配给temp2,如果有,那么有没有办法通过引用分配它?
答案 0 :(得分:1)
这实际上与选项无关 - 如果属性Node.left
和Node.right
不是选项,则会发生相同的行为。相反,这与Swift类属性有关。
在您之前的示例中,您将temp1
指向root
指向的相同的类实例。因此,root
和temp1
是Node
的相同实例,因此当您在一个属性中设置属性时,它会从另一个属性中获得更改。
在后一个示例中,您获得的值root!.right
(当前为零)并将其设置为新变量temp2
。您正在创建一个新的类实例,因此最终得到两个单独的类实例。当您分配到root.right
时,它对temp2
无效(反之亦然)。