2016-11-26 94 views
-2
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 
     } 

    } 
} 

我怎么能在循环改变字典的动态值与用于如何在循环改变字典的动态值以在迅速

+0

无关,但您需要学习使用适当的命名约定。只有类名应该以大写字母开头。变量,方法和参数名称都应以小写字母开头。你的函数应该是'func answersAndResults(answerIndex:Int,link:Dictionary )''。遵循这些标准使您的代码更易于被他人阅读。 – rmaddy

+0

谢谢@maddy – Fra01

回答

1

斯威夫特字典是值类型,因此当您将它们作为参数传递给函数时,函数正在接收字典的 副本。如果您希望函数修改您传入的原始字典,则必须将其设置为inout参数。这会将您在函数中所做的任何更改的结果复制回原始字典var。

第二点要记住的是,你的for循环里面,你也越来越不可变副本,每个键和值的(因为它们是整型,这也是值类型,而不是引用类型),所以你需要在原始字典上设置新值,而不是尝试增加循环内的副本。

结合上述几点,你可以改变你的函数是这样的:

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>更传统的斯威夫特简写。

+0

非常感谢你!!!!!!! @daniel – Fra01

+0

@ Fra01如果这回答您的问题,请将其标记为已接受 – Alexander