flutter 如何在Dart中给枚举赋值?

nzkunb0c  于 2023-01-06  发布在  Flutter
关注(0)|答案(4)|浏览(345)

在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的枚举赋值?

bpsygsoo

bpsygsoo1#

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
}
iqjalb3h

iqjalb3h2#

Dart中有一个即将推出的特性,称为增强的枚举,它允许枚举声明具有类中已知的许多特性。

enum Game {
    lol,
    dnf,
    dota;
  int get intValue => index + 1;
}

该特性尚未发布(请注意,有几个功能尚未工作),但是可以通过传递--enable-experiment=enhanced-enums,使用该工具的适当的新版本来执行该特性的实验。
结果是Game类型的枚举值将有一个getter intValue返回问题中提到的int值,因此print(myGame.intValue)将打印1、2或3。

q5lcpyga

q5lcpyga3#

例如,可以使用枚举扩展名

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值。枚举也有一个int值,默认情况下,它们各自的索引。你可以调用Game.lol.index,它会返回0。

ca1c2owp

ca1c2owp4#

要获取int值,只需向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;
  }
}

相关问题