Как я могу передать объекты перечисления в качестве ключа словаря в Swift? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть два простых перечисления, например:

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 голосов
/ 14 октября 2018

Ключ должен быть типа 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 соответствует ему.

...