使用枚举键为Swift字典添加值

时间:2014-12-28 11:04:07

标签: swift dictionary enums key add

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

知道如何正确地做到这一点吗?

1 个答案:

答案 0 :(得分:2)

问题是您已使用myDictionary而非let声明var。将其切换为var,您的代码将按预期工作。

字典是结构,是一种“值”类型。这意味着当您使用let声明它们时,它们将永远冻结它们分配的值。您无法调用更改其值的方法,包括通过下标([ ])分配它们。

不幸的是,错误消息并非超级有用。理想情况下,它会读取类似“尝试修改不可变值myDictionary”的内容。

不要让这个使用let让你失望 - 默认情况下使用let是一个很好的做法,除非你知道你需要更改一个值。但在这种情况下,您需要使用var