我无法将值添加到作为结构成员的字典中。例如,这个:
struct S {
var d = [String:Int]()
func f() {
d["Hello"] = 0
}
}
导致此错误:
'@lvalue $T6' is not identical to '(String, Int)'
将struct
更改为class
,或将d
的声明移至功能范围可消除错误。
我想这是一个错误,但我不知道。这有什么逻辑我不明白吗?
答案 0 :(得分:4)
您需要使用mutating
关键字标记该方法,以表明它确实修改了结构
mutating func f() {
d["Hello"] = 0
}
来自doc
从实例方法中修改值类型
结构和枚举是值类型。默认情况下 无法在其实例中修改值类型的属性 方法
但是,如果您需要修改结构的属性或 在特定方法中枚举,您可以选择进行变异 该方法的行为。然后该方法可以变异(即更改) 它在方法中的属性,以及它所做的任何更改 当方法结束时,将写回原始结构。该 方法还可以为其隐式self指定一个全新的实例 属性,这个新实例将替换现有的实例 方法结束。
您可以通过之前放置变异关键字来选择此行为 该方法的func关键字:
答案 1 :(得分:1)
是否需要对结构进行变异?
Struct S {
var d = [String:Int]()
mutating func f() {
d["Hello"] = 0
}
我在移动设备上,所以如果它不起作用请告诉我,我会给出答案。