我正在写一个可以序列化枚举和其他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)
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)
| 归档时间: |
|
| 查看次数: |
6311 次 |
| 最近记录: |