如何检查一个实例是否为枚举类型
问题描述:
'emun'在我看来就像一个关键字或基本类型。 很显然下面的代码无法编译:如何检查一个实例是否为枚举类型
if self is enum {
}
但我怎么能能够检查如果某些协议由任何enum实施?
protocol Enumatable {
}
extension Enumatable {
func isEnum() -> Bool {
return self is enum //it does not compile
}
}
但我真正想要的是在协议中设置某种约束来强制采用类为枚举。那可能吗?
谢谢!
答
我不确定它是如何使用镜像的高性能。但在这里你去:
enum SomeEnum {
case one
case two
}
let mirror = Mirror(reflecting: SomeEnum.one)
if let displayStyle = mirror.displayStyle {
switch displayStyle {
case .enum:
print("I am an enum")
default:
print("not an enum")
}
}
我不认为这是可能的。但真正的问题是为什么? –
那么,因为使用枚举的case结构,我可以为我的库提供一个简单而安全的api。我不希望用户能够使用类或结构来实现协议,因为我的库使用枚举的值作为内部键,另外我希望这种模式是实现协议的唯一方式。 –
您可能与'ErrorType'类似的情况。错误类型最好用作枚举类型,但这并不意味着我们必须将其限制为枚举类型。你不可能阻止你的用户在脚下自己射击。一个好的文档是最好的,你可以做的。 –