如何在 Dart 中循环枚举
Posted
技术标签:
【中文标题】如何在 Dart 中循环枚举【英文标题】:How to loop over an enum in Dart 【发布时间】:2021-03-01 08:56:56 【问题描述】:我的 Flutter 项目中有一个 Dart 枚举,如下所示:
enum RepeatState
playSongOnce,
repeatSong,
repeatPlaylist,
如果我有一些像 RepeatState.repeatSong
这样的随机枚举状态,我如何迭代到下一个枚举(不做类似使用 switch 语句映射它们的事情)?
我在this、this和this的帮助下找到了答案,所以我把它贴在下面。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何在 Dart 中循环枚举的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter dart 的列表中的循环内附加数据?