学习 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 }
我又回来了,这可能是一个简单的问题,但它让我难住了。
我在 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
}
并且感谢
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 }