学习 swift,递增变量的问题

Learning swift, Issues with incrementing variables

我又回来了,这可能是一个简单的问题,但它让我难住了。

我在 xcode 操场上编写了非常小、非常基本的代码。 我的代码简单地迭代了一个函数 10 次,每次都打印输出。

var start = 0
var x = 0
var answer = 2 * x

func spin() {
    print(answer)
}
while start < 10 {
    spin()
    x++
    start++
}

现在针对我的问题,我的代码似乎正确地增加了 'start' 变量.... 运行 并打印了 10 次。但是它会打印出一个 0 的列表。由于某种原因,'x' 变量没有递增。

我查阅了我拥有的几本关于 swift 的电子书以及文档,据我所知,我的代码应该可以工作。

有什么想法吗?

P.s。根据文档,我也尝试了 ++x,但无济于事。

编辑

由于以下答案更新了工作代码:

var start = 0
var x = 0
var answer = 2 * x

func spin() {
    print("The variable is", x, "and doubled it is", answer)
}
while start <= 10 {
    spin()
    x++
    start++
    answer = 2 * x
}

您刚刚在程序开始时将 2 * x 赋值给 answer,此时 x == 0,并且 answer 的值在整个程序中保持其初始值。这就是 Value Types 在 Swift 以及几乎所有其他语言中的工作方式

如果你希望答案总是x的2倍,你应该这样写

var start = 0
var x = 0
var answer = 2 * x

func spin() {
    print(answer)
}
while start < 10 {
    spin()
    x++
    start++
    answer = 2 * x
}

并且感谢 , you may also define a Computed Property 每次尝试获取答案时计算 2 * x 的值。这样,answer 就变成只读的了,你不能给它赋其他值。每次你尝试获取 answer 的值时,它都会执行 2 * x 计算。

var start = 0
var x = 0
var answer: Int {
  return 2 * x
}

func spin() {
    print(answer)
}
while start < 10 {
    spin()
    x++
    start++
}

您需要的是只读计算 属性。像这样尝试:

var answer: Int { return  2 * x }