Быстрое приведение от 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)")
}