我不确定我是不是白痴,或者当前的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编译器,如果有任何帮助的话。
由于
答案 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
将解决您的问题