迅速从AnyHashable转换为枚举

qua*_*yen 2 enums casting optional swift unwrap

我有这个游乐场:

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)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我永远不会被got it: ...打印出来.

为什么我不能从一个人投AnyHashableWeekDay

我想AnyHashable在函数中使用的原因message是key dict可以是IntWeekDay.如果我不使用AnyHashable,我应该使用什么类型的目的?

谢谢

Kam*_*ran 6

你应该使用baseAnyHashable来回退到它的原始类型,如下所示,

if let k = (k.base as? WeekDay), k == .mon {
   print("got it: \(k)")
}
Run Code Online (Sandbox Code Playgroud)