Swift:如何通过引用分配可选项

时间:2015-07-03 22:05:00

标签: swift

给出以下代码:

    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,如果有,那么有没有办法通过引用分配它?

1 个答案:

答案 0 :(得分:1)

这实际上与选项无关 - 如果属性Node.leftNode.right不是选项,则会发生相同的行为。相反,这与Swift类属性有关。

在您之前的示例中,您将temp1指向root指向的相同的类实例。因此,roottemp1Node的相同实例,因此当您在一个属性中设置属性时,它会从另一个属性中获得更改。

在后一个示例中,您获得的值root!.right(当前为零)并将其设置为新变量temp2。您正在创建一个新的类实例,因此最终得到两个单独的类实例。当您分配到root.right时,它对temp2无效(反之亦然)。