Dictionary <string,string =“”> </string,>的编译器错误

时间:2015-03-01 10:08:19

标签: swift

我不确定我是不是白痴,或者当前的Swift编译器中存在编译错误但是......

我声明了一个传递Dictionary<String, String>的函数,在该方法中我尝试将一个项添加到Dictionary中,方法是

func writeStatus(res: Dictionary<String, String>) {
    res["key"] = "value"
}

我收到了编译错误

'@lvalue $T5 is not identical to '(String, String)'

在方法中声明Dictionary我可以添加项目。所以我的问题是如何在函数中将项添加到字典中?我可以在行函数中完成所有这些,但我讨厌做太多的函数。

我在Xcode 6.2 beta中使用Swift编译器,如果有任何帮助的话。

由于

2 个答案:

答案 0 :(得分:1)

不确定这是否更有帮助,但是如果你想要改变字典,那么使用inout参数可能是个主意:

func addDict(inout res: [String: String]) {
    res["key"] = "value"
}

var res = [String: String]()
addDict(&res)
println(res) // [key: value]

这不会有任何错误,res会在addDict函数中为其分配值。

答案 1 :(得分:1)

默认情况下,所有函数参数都是不可变的。因此,如果您尝试改变它们,您将收到编译器错误。如果要改变函数参数,请将其定义为var

func writeStatus(var res: [String: String]) {
    res[key] = "value"
}

但是这里不行。因为Dictionary是值类型,并且值类型在传递到函数时被复制。而且你的突变只会对复制的值产生影响。所以在这个senario定义参数inout将解决您的问题