Dart(15)-枚举

一、简介

枚举类型,通常称为enumerationsenums,是一种特殊的类,用于表示固定数量的常量值。

所有枚举都会自动继承Enum类。它们也是密封的,这意味着它们不能被子类化、实现、混合或以其他方式显式实例化。

抽象类和 mixin 可以实现或继承Enum,但除非它们随后由 enum 声明实现或混合到 enum 声明中,否则没有对象可以实现该类或 mixin 的类型。

二、声明简单的枚举

要声明一个简单的枚举类型,请使用enum关键字并列出要枚举的值:

enum Color { red, green, blue }

三、声明增强的枚举

Dart 还允许枚举声明来声明具有字段、方法和 const 构造函数的类,这些构造函数仅限于固定数量的已知常量实例。

要声明增强型枚举,请遵循类似于普通的语法,但有一些额外要求:

  • 实例变量必须是final,包括那些由mixins添加的。

  • 所有生成构造函数都必须是常量。

  • 工厂构造函数只能返回固定的已知枚举实例之一。

  • 没有其他类可以Enum自动扩展。

  • index, hashCode, 等式运算符不能被重写。

  • values不能在枚举中声明名为的成员,因为它会与自动生成的静态valuesgetter 冲突。

  • 枚举的所有实例都必须在声明的开头声明,并且必须至少声明一个实例。

下面是一个示例,它声明了一个具有多个实例、实例变量、一个 getter 和一个已实现接口的增强型枚举:

enum Vehicle implements Comparable<Vehicle> {
  car(tires: 4, passengers: 5, carbonPerKilometer: 400),
  bus(tires: 6, passengers: 50, carbonPerKilometer: 800),
  bicycle(tires: 2, passengers: 1, carbonPerKilometer: 0);
​
  const Vehicle({
    required this.tires,
    required this.passengers,
    required this.carbonPerKilometer,
  });
​
  final int tires;
  final int passengers;
  final int carbonPerKilometer;
​
  int get carbonFootprint => (carbonPerKilometer / passengers).round();
​
  @override
  int compareTo(Vehicle other) => carbonFootprint - other.carbonFootprint;
}

增强型枚举需要至少 dart-2.17版本库

四、使用枚举

像访问任何其他静态变量一样访问枚举值:

final favoriteColor = Color.blue;
if (favoriteColor == Color.blue) {
  print('Your favorite color is blue!');
}

枚举中的每个值都有一个index属性,它返回值在枚举声明中从零开始的位置。例如,第一个值的索引为 0,第二个值的索引为 1。

assert(Color.red.index == 0);
assert(Color.green.index == 1);
assert(Color.blue.index == 2);

要获取所有枚举值的列表,请使用枚举的values常量。

List<Color> colors = Color.values;
assert(colors[2] == Color.blue);

您可以在switch 语句中使用枚举,如果您不处理所有枚举值,则会收到警告:

var aColor = Color.blue;
​
switch (aColor) {
  case Color.red:
    print('Red as roses!');
    break;
  case Color.green:
    print('Green as grass!');
    break;
  default: // Without this, you see a WARNING.
    print(aColor); // 'Color.blue'
}

如果您需要访问枚举值的名称,例如blue来自Color.blue,请使用.name`属性:

print(Color.blue.name); // 'blue'

五、总结

1.本文为翻译官方文档

2.增强枚举

3.index、values和name属性

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值