func answersAndResults (answerIndex: Int, link: Dictionary <Int, Int>) {
if inputIndex == answerIndex {
for (linkedResult, weight) in link {
linkedResult += weight // Left side of mutating operator isn't immutable: "linkedResul" is a let costant
}
}
}
如何使用 for in 循环动态更改 of 字典的值?
Swift 字典是值类型,因此当您将它们作为参数传递给函数时,该函数会接收字典的
let
copy。如果您希望该函数修改您传入的原始字典,则必须将其设为 inout
参数。这会将您在函数中所做的任何更改的结果复制回原始字典变量。
要记住的第二点是,在 for 循环中,您还会获得每个键和值的不可变 copy (因为它们是 Int,它们也是值类型,而不是引用类型),因此您需要设置原始字典上的新值,而不仅仅是尝试增加循环内的副本。
结合以上几点,您可以将函数更改为如下所示:
func answersAndResults (answerIndex: Int, link: inout [Int:Int]) {
if inputIndex == answerIndex {
for (linkedResult, weight) in link {
link[linkedResult] == linkedResult + weight
}
}
}
另请注意,
[Int:Int]
是 Dictionary<Int, Int>
的更传统的 Swift 简写。