swift - 使用枚举键向 Swift 字典添加值

标签 swift dictionary enums key add

我在 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/

相关文章:

swift - 在 Swift 中如何编写一个函数来转换 [String :[Int]] to [String:Int]

swift - Spritekit 围绕中心旋转多个节点

ios - 调整 inputAccessoryView 大小时如何解决 "API error: returned 0 width, assuming UIViewNoIntrinsicMetric"?

python - 如何将嵌套字典与 .map 用于 Pandas 系列? pd.Series([]).map

c++ - 是否有一种有效、正确的方法将非常大的公共(public)类枚举放在使用它们的公共(public)方法下面,以使代码更干净?

Java - 枚举 valueOf "override"命名约定

python - 如何在 Python 中记录和使用类似枚举的数据类型?

arrays - 在数组中找到符合条件的对

java - 持久映射映射到队列以实现公平调度?

python - 在 Python 中创建一个新字典