给定以下代码:
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)
大概在最后一个代码片段中 root!.right 按值分配给 temp2,如果是这样,那么是否有通过引用分配它的方法?
最佳答案
这实际上与可选值无关——如果属性 Node.left
和 Node.right
不是可选值,则会发生相同的行为。相反,这与 Swift 类属性有关。
在您之前的示例中,您将 temp1
指向 root
指向的同一类实例。因此,root
和 temp1
是 Node
的同一个实例,因此当您在其中设置一个属性时,当您从其他。
在后一个示例中,您将获取 root!.right
的值(当前为 nil)并将其设置为新变量 temp2
。您正在创建一个新的类实例,因此您最终会得到两个单独的类实例。当您分配给 root.right
时,它不会影响 temp2
(反之亦然)。
关于Swift:如何通过引用分配一个可选的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31214686/