【问题标题】:Learning swift, Issues with incrementing variables快速学习,递增变量的问题
【发布时间】:2015-10-28 02:26:30
【问题描述】:

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

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

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

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

现在对于我的问题,看来我的代码正确地增加了“开始”变量....运行和打印 10 次。但是它会打印出一个 0 列表。由于某种原因,“x”变量没有递增。

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

有什么想法吗?

附:根据文档,我也尝试过 ++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
}

【问题讨论】:

  • 一旦 answer 取值为 0 (var answer = 2 * 0),它就不再被修改,因此每次都打印 0。 x 是递增的,它只是对答案的值没有影响。

标签: swift macos variables increment


【解决方案1】:

您刚刚在程序开始时将 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
}

感谢Leo Dabus's answer,您还可以定义Computed Property 来在每次尝试获取答案的值时计算2 * x 的值。这样,答案变为只读,您不能为其分配其他值。并且每次尝试获取 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++
}

【讨论】:

  • 啊,我想我现在明白了,我需要在增量后重新分配“答案”,否则它只会保持在原始值“0”,非常感谢:)
【解决方案2】:

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

var answer: Int { return  2 * x }

【讨论】:

  • 在操场上测试过,效果也很好,只需要少一行代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 2016-01-10
  • 1970-01-01
  • 2017-11-04
  • 2010-09-16
  • 1970-01-01
相关资源
最近更新 更多