如何在Dart中为枚举类型分配原始值?

9
在Swift中,您可以轻松地为枚举类型分配原始值,例如:
enum Game: Int {
    case lol = 1
    case dnf = 2
    case dota = 3
}

然而,在Dart中,您不能为枚举类型分配原始值:
enum Game {
  lol = 1,
  dnf = 2,
  dota = 3,
}

出现错误,您只能使用最简单的枚举:

enum Game {
  lol,
  dnf,
  dota,
}

这真的让我失望。

有没有办法像Swift一样为Dart的枚举分配原始值?

4个回答

12

Dart 2.17支持增强型枚举

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

使用方法:

void main() {
  const game = Game.lol;
  print(game.value); // 1
}

4
你可以使用枚举扩展来实现。
enum EnumAction { subtract, add }

extension EnumActionExtension on EnumAction {
  String get name {
    switch (this) {
      case EnumAction.add:
        return 'add';
      case EnumAction.subtract:
        return 'subtract';
    }
  }
}

在您的情况下,您将返回一个int和一个int值。枚举也会默认分配给它们相应的整数值,即它们的索引。您可以调用Game.lol.index并返回0。


1
在Dart中即将推出一项名为"增强型枚举"的功能,它允许使用类似于类的特性来声明枚举。例如:
enum Game {
    lol,
    dnf,
    dota;
  int get intValue => index + 1;
}

这个功能尚未发布(请注意,有几个问题尚未解决),但可以通过使用适当新鲜的工具版本并传递--enable-experiment=enhanced-enums来进行实验。

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


0

要获取一个整数值,只需将枚举传递给enumGame函数即可。

enum EnumGame { lol, dnf, dota }
enumGame(EnumGame enumGame) {
  switch (enumGame) {
    case EnumGame.lol:
      return 1;
    case EnumGame.dnf:
      return 2;
    case EnumGame.dota:
      return 3;
    default:
      return -1;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接