修改for-each循环的迭代器中的值

时间:2017-01-12 09:13:57

标签: swift3

我目前开始学习Swift 3(我已经有其他编程语言的经验),并问我是否可以修改for-each循环的迭代器中的值(不是for-in!)。我们来看看下面的例子:

var numbers = [45000.0, 50000.0, 60000.0]

for i in 0..<numbers.count {
    numbers[i] = numbers[i] + (numbers[i] * 0.1)   
}

在这个例子中,我可以修改数组内部的值。但是,如果我想使用for-each循环:

for number in numbers {
    number = number + (number * 0.1)
}

它不会编译。是否有可能以任何其他方式修改数字的值(在我看来,这似乎是C ++中的迭代器)?

感谢所有答案!

2 个答案:

答案 0 :(得分:5)

您仍然在思考旧的编程语言。现代方法是使用辅助函数一步完成所有操作,而不使用手动迭代:

let numbers = [45000.0, 50000.0, 60000.0]
let newNumbers = numbers.map { $0 + $0 * 0.1 }

注意我们生成了一个新数组而不是更改现有数组。使用常量(不可变)有助于我们避免许多常见的编程错误。

答案 1 :(得分:4)

使用您的示例是不可能的,因为Array<Double>是值类型而索引变量number是常量。要使number变为可变,你必须复制它,使数组中的原始项保持不变。

妥协enumerated()函数。

var numbers = [45000.0, 50000.0, 60000.0]

for (i, number) in numbers.enumerated() {
    numbers[i] = number + (number * 0.1)
}

然而,Sulthan建议的解决方案更可取。