我在Swift中定义了Dictionary,将enum作为键,将struct作为值。在运行时我想为给定的枚举键添加字典值,但是我收到以下错误:
' @lvalue $ T9'与'(MyEnum,MyData)'
不同enum MyEnum {
case A, B, C
}
struct MyData {
var x : Int
var y : Int
init(x:Int, y: Int) {
self.x = x
self.y = y
}
}
class Tester {
let myDictionary = [MyEnum : MyData]()
func dummy() {
self.myDictionary[MyEnum.A] = MyData(x: 1, y: 2) // <-- error in this line
}
}
知道如何正确地做到这一点吗?
答案 0 :(得分:2)
问题是您已使用myDictionary
而非let
声明var
。将其切换为var
,您的代码将按预期工作。
字典是结构,是一种“值”类型。这意味着当您使用let
声明它们时,它们将永远冻结它们分配的值。您无法调用更改其值的方法,包括通过下标([ ]
)分配它们。
不幸的是,错误消息并非超级有用。理想情况下,它会读取类似“尝试修改不可变值myDictionary”的内容。
不要让这个使用let
让你失望 - 默认情况下使用let
是一个很好的做法,除非你知道你需要更改一个值。但在这种情况下,您需要使用var
。