我有两个简单的枚举,例如:
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"
]
需要帮助!
答案 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
符合协议。