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

时间:2016-05-13 08:52:02

标签: 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 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
你能清楚我吗?

1 个答案:

答案 0 :(得分:0)

我猜你正在操场上写这段代码!?

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

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

  

GET
  ˚F
  设置

说明:

游乐场的执行情况如下:

enter image description here

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