我在 Swift 中定义了 Dictionary,以枚举为键,结构为值。在运行时,我想为给定的枚举键向字典添加值,但是我收到以下错误:
“@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
}
}
知道如何正确地做到这一点吗?
最佳答案
问题是您使用 let
而不是 var
声明了 myDictionary
。将其切换为 var
,您的代码将按预期工作。
字典是结构体,是一种“值”类型。这意味着当您使用 let
声明它们时,它们会被分配的值永久卡住。您不能调用更改它们值的方法,包括通过下标 ([ ]
) 分配给它们。
不幸的是,错误消息不是很有帮助。理想情况下,它会读到类似“尝试修改不可变值 myDictionary”的内容。
不过,不要因此而放弃使用 let
——默认情况下使用 let
是一个很好的做法,除非您知道需要更改一个值。但在这种情况下,您需要使用 var
。
关于swift - 使用枚举键向 Swift 字典添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27675807/