【问题标题】:How to assign raw value to enum in Dart?如何在 Dart 中为枚举分配原始值?
【发布时间】:2022-01-26 20:21:44
【问题描述】:

在 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 的枚举分配原始值?

【问题讨论】:

    标签: flutter dart enums


    【解决方案1】:

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

    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。

    【讨论】:

      【解决方案2】:

      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。

      【讨论】:

        猜你喜欢
        • 2019-05-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多