【发布时间】:2021-03-01 08:56:56
【问题描述】:
我的 Flutter 项目中有一个 Dart 枚举,如下所示:
enum RepeatState {
playSongOnce,
repeatSong,
repeatPlaylist,
}
如果我有一些像 RepeatState.repeatSong 这样的随机枚举状态,我如何迭代到下一个枚举(不做类似使用 switch 语句映射它们的事情)?
【问题讨论】:
我的 Flutter 项目中有一个 Dart 枚举,如下所示:
enum RepeatState {
playSongOnce,
repeatSong,
repeatPlaylist,
}
如果我有一些像 RepeatState.repeatSong 这样的随机枚举状态,我如何迭代到下一个枚举(不做类似使用 switch 语句映射它们的事情)?
【问题讨论】:
给定一个像这样的枚举,
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
【讨论】:
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
【讨论】: