我可能会再次回到可能是一个简单的问题,但它让我感到难过。
我在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
}
答案 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 }