Быстрое приведение от AnyHashable к enum

У меня есть эта площадка:

import Foundation

enum WeekDay: Int {
    case mon, tues, wed, thurs, fri, sat, sun
}

let wd = WeekDay(rawValue: 0)! // mon

let param = [wd: [1, 2, 3]]
message(dict: param)

func message(dict: [AnyHashable: [Int]?]) {
    for (k, v) in dict {
        print(k, type(of: k), v) // mon AnyHashable Optional([1, 2, 3])

        if let k = k as? WeekDay {
            print("got it: \(k)")
        }
    }
}

Но я никогда не смогу получить got it: ... распечатаны.

Почему я не могу бросить из AnyHashable в WeekDay?

Причина, по которой я хочу использовать AnyHashable в функции message это ключ dict может быть Int или же WeekDay, Если я не использую AnyHashableкакой тип я должен использовать для своих целей?

Спасибо

1 ответ

Решение

Вы должны использовать base ценность AnyHashable вернуть к исходному типу, как показано ниже,

if let k = (k.base as? WeekDay), k == .mon {
   print("got it: \(k)")
}
Другие вопросы по тегам