我目前开始学习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 ++中的迭代器)?
感谢所有答案!
答案 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建议的解决方案更可取。