如何在 Dart 中将原始值分配给枚举?

无夜之*_*之星辰 12 enums dart flutter

在 Swift 中,您可以轻松地将原始值分配给枚举,例如:

enum Game: Int {
    case lol = 1
    case dnf = 2
    case dota = 3
}
Run Code Online (Sandbox Code Playgroud)

但是,您不能将原始值分配给 Dart 中的枚举:

enum Game {
  lol = 1,
  dnf = 2,
  dota = 3,
}
Run Code Online (Sandbox Code Playgroud)

它显示错误,你只能使用最简单的枚举:

enum Game {
  lol,
  dnf,
  dota,
}
Run Code Online (Sandbox Code Playgroud)

实在是让我很失望。

有什么办法可以像 Swift 一样将原始值分配给 Dart 的枚举吗?

jit*_*555 18

Dart 2.17支持增强枚举

enum Game {
  lol(1),
  dnf(2),
  dota(3);
  
  const Game(this.value);
  final int value;
}
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

void main() {
  const game = Game.lol;
  print(game.value); // 1
}
Run Code Online (Sandbox Code Playgroud)


Eri*_*nst 1

Dart 中有一个即将推出的功能,称为增强枚举,它允许使用类中已知的许多功能进行枚举声明。例如:

enum Game {
    lol,
    dnf,
    dota;
  int get intValue => index + 1;
}
Run Code Online (Sandbox Code Playgroud)

该功能尚未发布(请注意,有几件事尚未工作),但可以通过传递 来使用适当的新版本工具进行实验--enable-experiment=enhanced-enums

结果是 type 的枚举值Game将有一个 getterintValue返回int问题中提到的值,因此print(myGame.intValue)将打印 1、2 或 3。