如何在Swift中将枚举对象作为字典键传递?

时间:2018-10-14 14:56:48

标签: swift dictionary enums key

我有两个简单的枚举,例如:

enum A: String {
    case i = "i"
    case j = "j"
}

enum B: String {
    case x = "x"
    case y = "y"
    case i = "i"
}

而且,我有一个字典,该字典将所有枚举值与其他一些值映射。

var myDict:[String:String] = [
    A.i.rawValue : "i in A",
    A.j.rawValue : "j in A",
    B.x.rawValue : "x in B",
    B.y.rawValue : "y in B",
    B.i.rawValue : "i in B"
]

运行此代码会引发错误:

  

致命错误:字典文字包含重复的键

因为字典中不能包含相同的多个键。

问题:

是否可以传递枚举对象而不是原始值?像这样:

var myDict:[<Dont know what to type here>:String] = [
    A.i: "i in A",
    A.j: "j in A",
    B.x: "x in B",
    B.y: "y in B",
    B.i: "i in B"
]

需要帮助!

1 个答案:

答案 0 :(得分:3)

您需要密钥为AnyHashable类型。

var myDict:[AnyHashable: String] = [
    A.i: "i in A",
    A.j: "j in A",
    B.x: "x in B",
    B.y: "y in B",
    B.i: "i in B"
]

print(myDict[A.i] ?? "") // "i in A"
print(myDict[B.i] ?? "") // "i in B"

字典密钥的基本要求是它符合协议Hashable,而enum符合协议。