【问题标题】:How can I pass enum objects as a dictionary key in Swift?如何在 Swift 中将枚举对象作为字典键传递?
【发布时间】:2019-03-19 03:01:42
【问题描述】:

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

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"
]

需要帮助!

【问题讨论】:

  • 你想通过将它们放入字典来做什么? A.i.rawValueB.i.rawValue 没有区别。两者都适用于字符串i
  • 为了演示我的问题,我使用了简单的枚举。实际部分不只是返回字符串。谢谢!!

标签: swift dictionary enums key


【解决方案1】:

您需要将密钥类型设为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符合它。

【讨论】:

    猜你喜欢
    • 2018-10-30
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2019-06-29
    • 2011-08-10
    相关资源
    最近更新 更多