Swift Getter意外地为inout参数调用了第二次

Swift Getter意外地为inout参数调用了第二次,swift,swift2,Swift,Swift2,我正在学习Swift,我无法理解为什么这段代码会输出冗余输出: class A {} var x: A { set { print("set") } get { print("get") return A() } } func f(inout y: A) { print("f") } f(&x) 结果是: get f set get 为什么最后一个到达这里? 如果我在f中添加另一个inout参数: class A {} var

我正在学习Swift,我无法理解为什么这段代码会输出冗余输出:

class A {}
var x: A {
    set { print("set") }
    get {
        print("get")
        return A()
    }
}
func f(inout y: A) { print("f") }
f(&x)
结果是:

get
f
set
get
为什么最后一个到达这里? 如果我在f中添加另一个inout参数:

class A {}
var x: A {
    set { print("set") }
    get {
        print("get")
        return A()
    }
}
func f(inout y: A, inout z: Int) { print("f") }
var z = 10
f(&x, z:&z)
新的结果是:

get
f
set

你能让我明白吗?

我猜你是在操场上写这段代码的

如果将其放入常规项目并在模拟器上运行,则不会看到该行为。
它只发生在操场上

在设备上,两种方法都打印预期的

获取
f
设置


说明: 操场执行如下所示:


注意右边最后一行的
A
?操场试图显示
x
的值,为了显示它,它访问它的getter!如果您有多个参数,Xcode不会尝试打印任何内容->添加第二个参数会导致Xcode无法获取任何值。

我猜您是在操场上编写此代码的

如果将其放入常规项目并在模拟器上运行,则不会看到该行为。
它只发生在操场上

在设备上,两种方法都打印预期的

获取
f
设置


说明: 操场执行如下所示:


注意右边最后一行的
A
?操场试图显示
x
的值,为了显示它,它访问它的getter!如果您有多个参数,Xcode不会尝试打印任何内容->添加第二个参数会导致Xcode不
获取
任何值。

我没有添加inout参数。结果与第一次相同。如果我添加一个inout参数。结果会有所不同。无论如何,谢谢你的观点。我想你是对的。我会在晚些时候核实的。@avit你是什么意思?我是说我刚开始在操场上学习Swift:)。我还没有学会用其他语言编写代码。谢谢@您是否有时间验证我的答案是否正确?谢谢,我会验证,然后将您的答案标记为已解决。我正在读这本书,现在我只是在操场上尝试。我没有添加inout参数。结果与第一次相同。如果我添加一个inout参数。结果会有所不同。无论如何,谢谢你的观点。我想你是对的。我会在晚些时候核实的。@avit你是什么意思?我是说我刚开始在操场上学习Swift:)。我还没有学会用其他语言编写代码。谢谢@您是否有时间验证我的答案是否正确?谢谢,我会验证,然后将您的答案标记为已解决。我正在读这本书,现在我只是在操场上试一下。