【问题标题】:How to loop over an enum in Dart如何在 Dart 中循环枚举
【发布时间】:2021-03-01 08:56:56
【问题描述】:

我的 Flutter 项目中有一个 Dart 枚举,如下所示:

enum RepeatState {
  playSongOnce,
  repeatSong,
  repeatPlaylist,
}

如果我有一些像 RepeatState.repeatSong 这样的随机枚举状态,我如何迭代到下一个枚举(不做类似使用 switch 语句映射它们的事情)?

我在thisthisthis的帮助下找到了答案,所以我把它贴在下面。

【问题讨论】:

    标签: flutter dart enums


    【解决方案1】:

    给定一个像这样的枚举,

    enum MyEnum {
      horse,
      cow,
      camel,
      sheep,
      goat,
    }
    

    遍历枚举值

    您可以使用values 属性迭代枚举的值:

    for (var value in MyEnum.values) {
      print(value);
    }
    
    // MyEnum.horse
    // MyEnum.cow
    // MyEnum.camel
    // MyEnum.sheep
    // MyEnum.goat
    

    值与其索引之间的转换

    每个值都有一个索引:

    int index = MyEnum.horse.index; // 0
    

    您可以使用下标表示法将索引转换回枚举:

    MyEnum value = MyEnum.values[0]; // MyEnum.horse
    

    寻找下一个枚举值

    结合这些事实,您可以遍历枚举的值以找到下一个值,如下所示:

    MyEnum nextEnum(MyEnum value) {
      final nextIndex = (value.index + 1) % MyEnum.values.length;
      return MyEnum.values[nextIndex];
    }
    

    即使索引位于枚举值列表的末尾,也使用模运算符句柄:

    MyEnum nextValue = nextEnum(MyEnum.goat); // MyEnum.horse
    

    【讨论】:

      【解决方案2】:
      enum Fruites { Mango, Banana, Cherry, Avacado, Papaya }
      
      void main() {
        Fruites.values.forEach((name) {
          print(name);
        });
      }
      

      输出:

      Fruites.Mango
      Fruites.Banana
      Fruites.Cherry
      Fruites.Avacado
      Fruites.Papaya
      

      只取名字部分

      print(name.toString().split('.').elementAt(1));
      

      输出:

      Mango
      Banana
      Cherry
      Avacado
      Papaya
      

      【讨论】:

        猜你喜欢
        • 2021-04-06
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        • 1970-01-01
        • 2012-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多