swift 从 AnyHashable 转换为枚举
swift cast from AnyHashable to 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
?
之所以要在函数message
中使用AnyHashable
是因为dict
的key可以是Int
或WeekDay
。如果我不使用 AnyHashable
,我应该使用哪种类型?
谢谢
您应该使用 AnyHashable
的 base
值转换回其原始类型,如下所示,
if let k = (k.base as? WeekDay), k == .mon {
print("got it: \(k)")
}
我有这个游乐场:
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
?
之所以要在函数message
中使用AnyHashable
是因为dict
的key可以是Int
或WeekDay
。如果我不使用 AnyHashable
,我应该使用哪种类型?
谢谢
您应该使用 AnyHashable
的 base
值转换回其原始类型,如下所示,
if let k = (k.base as? WeekDay), k == .mon {
print("got it: \(k)")
}