学习swift,增加变量的问题

时间:2015-10-28 02:26:31

标签: swift macos variables increment

我可能会再次回到可能是一个简单的问题,但它让我感到难过。

我在xcode游乐场中编写了非常小的,非常基本的代码片段。 我的代码只是迭代一个函数10次,每次打印输出。

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

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

现在我的问题,似乎我的代码正确地增加了“开始”#39;变量....运行和打印10次。但是它打印出0的列表。出于某种原因,&#39; x&#39;变量不会递增。

我已经快速查阅了我的一些电子书以及文档,并且据我所知,我的代码应该可以工作。

有什么想法吗?

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 个答案:

答案 0 :(得分:4)

您刚刚在程序开头指定了2 * x来回答,当x == 0时,并且answer的值在整个程序中保持其初始值。这就是Value Types在Swift以及几乎任何其他语言中的工作方式

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

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

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

感谢Leo Dabus's answer,您还可以定义Computed Property,以便在每次尝试获取答案值时计算2 * x的值。这样,答案变为只读,您无法为其分配其他值。每次尝试获取答案值时,都会执行2 * x计算。

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

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

答案 1 :(得分:3)

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

var answer: Int { return  2 * x }