如何在Swift中检查Enum类型?

mbo*_*ess 5 enums swift

我正在写一个可以序列化枚举和其他Swift类型(字符串,对象等)的序列化程序。所以我需要检查传递到我的序列化程序中的Any参数是否为Enum或其他。看来在Swift中做到这一点的唯一方法是使用反射。下面的代码看起来合理还是有更好的方法来检查Enum类型?

enum Things {
    case Thing1
    case Thing2
}

let something:Any = Things.Thing1
let mirror = Mirror(reflecting: something)
if (mirror.displayStyle == .Enum) {
    print("Reflected type is Enum") // works
}
Run Code Online (Sandbox Code Playgroud)

use*_*734 1

enum Things {
    case Thing1
    case Thing2
}

let something:Any = Things.Thing1

something.dynamicType == Things.self // true
Run Code Online (Sandbox Code Playgroud)

根据讨论更新..

protocol P {}
enum Things:P {
    case Thing1
    case Thing2
}
enum Things2:P{
    case Things21
}

let something:Any = Things.Thing1
something.dynamicType == Things.self // true
if let p = something as? P {
    print(true)
}

let somethingelse: Any = Things2.Things21
if let p = somethingelse as? P {
    print(true)
}
Run Code Online (Sandbox Code Playgroud)