【发布时间】:2017-03-25 23:06:27
【问题描述】:
如果枚举实例是枚举类型或者它已经存在但我不知道,是否可以创建一个返回布尔值的通用枚举函数?
我在我的项目中使用了大量的枚举。我经常用关联的值定义枚举。
简单示例:
enum Mode {
case new
case edit(Record) // Record is a struct type
}
我会定期检查一个枚举实例是否是一个特定的枚举案例。但是,很多时候,我不需要检查关联的值。我正在寻找一种方便的方法来检查案件。我知道的每种方法都有缺点。
方法1-2:If Case模式匹配或Switch case
let myMode = Mode.edit
if case Mode.edit(_) = myMode {
// do something
}
switch mode {
case .edit:
// do something
default:
break
}
缺点:
- 无法直接将检查分配给变量。必须在关闭时这样做
- 不能将此模式直接用作函数的参数
方法3-5 实现枚举函数或检查计算属性或Equatable协议的值
缺点:
- 必须为每个枚举类型实现
相反,我正在寻找一种方法来编写一个通用函数,如果枚举实例匹配一个枚举大小写,则该函数返回一个布尔值。可以编写一次并应用于所有枚举的东西。类似于 Struct 和 Class 类型的通用函数:
func checkType<T, S> (a: T, _: S.Type) -> Bool {
return a is S // though you could just call this directly
}
【问题讨论】:
标签: swift