Dart支持枚举吗?

bfnvny8b  于 2022-12-30  发布在  其他
关注(0)|答案(8)|浏览(284)

Dart支持枚举吗?例如:

enum myFruitEnum { Apple, Banana }

粗略地搜索一下这些文件就知道没有。

z0qdvdin

z0qdvdin1#

1.8开始,可以使用如下枚举:

enum Fruit {
  apple, banana
}

main() {
  var a = Fruit.apple;
  switch (a) {
    case Fruit.apple:
      print('it is an apple');
      break;
  }

  // get all the values of the enums
  for (List<Fruit> value in Fruit.values) {
    print(value);
  }

  // get the second value
  print(Fruit.values[1]);
}

1.8之前的旧方法:

class Fruit {
  static const APPLE = const Fruit._(0);
  static const BANANA = const Fruit._(1);

  static get values => [APPLE, BANANA];

  final int value;

  const Fruit._(this.value);
}

类中的那些静态常量是编译时常量,并且这个类现在可以用在例如switch语句中:

var a = Fruit.APPLE;
switch (a) {
  case Fruit.APPLE:
    print('Yes!');
    break;
}
qco9c6ql

qco9c6ql2#

使用r41815,Dart获得了本机枚举支持,请参见http://dartbug.com/21416,并可按如下方式使用

enum Status {
  none,
  running,
  stopped,
  paused
}

void main() {
  print(Status.values);
  Status.values.forEach((v) => print('value: $v, index: ${v.index}'));
  print('running: ${Status.running}, ${Status.running.index}');
  print('running index: ${Status.values[1]}');
}

[状态.无、状态.正在运行、状态.已停止、状态.已暂停]
值:状态。无,索引:0
value:状态。正在运行,索引:1
值:状态。已停止,索引:2
值:状态。已暂停,索引:3
正在运行:状态。正在运行,1
运行指数:Status.running
一个限制是,不可能为枚举项设置自定义值,这些值是自动编号的。
更多详细信息,请参阅https://www.dartlang.org/docs/spec/EnumsTC52draft.pdf草案

cnwbcb6i

cnwbcb6i3#

枚举应该在将来可用。但是在Enum has landed之前,您可以执行以下操作:

class Fruit {
  static final APPLE = new Fruit._();
  static final BANANA = new Fruit._();

  static get values => [APPLE, BANANA];

  Fruit._();
}
5us2dqdw

5us2dqdw4#

This,这可能是您问题的答案:

... for the technology preview it was decided to leave it out and just 
use static final fields for now. It may be added later.

你仍然可以这样做:

interface ConnectionState { }
class Connected implements ConnectionState { }
class Connecting implements ConnectionState { }
class Disconnected implements ConnectionState { }

//later
ConnectionState connectionState;
if (connectionState is Connecting) { ... }

在我看来,它使用起来更清晰,对于编写应用程序结构来说,它有点困难,但在某些情况下,它更好,更清晰。

eoxn13cs

eoxn13cs5#

下面这个方法怎么样:

class FruitEnums {
  static const String Apple = "Apple";
  static const String Banana = "Banana";
}

class EnumUsageExample {

  void DoSomething(){

    var fruit = FruitEnums.Apple;
    String message;
    switch(fruit){
      case(FruitEnums.Apple):
        message = "Now slicing $fruit.";
        break;
      default:
        message = "Now slicing $fruit via default case.";
        break;
    }
  }
}
e37o9pze

e37o9pze6#

是的!在Dart中使用枚举实际上非常有用:

enum fruits{
    BANANA, APPLE, ORANGE
  }
x6yk4ghg

x6yk4ghg7#

只需使用类型类文件。
Dart-Types
简单、快速、更强大、更有帮助。

***小问题,*该类限制为五个不同的选择,加上一个表示为空。

vd8tlhqk

vd8tlhqk8#

以防有人还在寻找快速解决方案。
我们有时需要枚举的整数值,有时需要字符串值。因此我们实现了一个快速包这个. Enum Value Generator和一个扩展,以方便地生成必要的代码,但这不是强制性的. vscode extension。它也可以与jsonAnnotation一起使用。

import 'package:mobkit_generator/annotations.dart';

part 'example.g.dart'

@EnumSerializable(String)
enum PersonStr {
  @EnumValue('John')
  name,
  @EnumValue('66')
  number,
}

@EnumSerializable(int)
enum PersonInt {
  @EnumValue(1)
  name,
  @EnumValue('66')
  number,
}

相关问题