[enums] Dart는 열거를 지원합니까?

Dart는 열거를 지원합니까? 예를 들면 :

enum myFruitEnum { Apple, Banana }

문서에 대한 간단한 검색은 아니오를 제안합니다.



답변

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;
}


답변

r41815를 사용하면 Dart가 기본 Enum 지원을 받았으며 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]}');
}

[Status.none, Status.running, Status.stopped, Status.paused]
값 : Status.none, 인덱스 : 0
값 : Status.running, 인덱스 : 1
값 : Status.stopped, 인덱스 : 2
값 : Status.paused, 인덱스 : 3
실행 : Status.running, 1
실행 인덱스 : Status.running

제한 사항은 열거 형 항목에 대한 사용자 지정 값을 설정할 수 없으며 자동으로 번호가 지정된다는 것입니다.

이 초안에 대한 자세한 내용은 https://www.dartlang.org/docs/spec/EnumsTC52draft.pdf


답변

질문에 답변 할 수있다 :

... 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) { ... }

제 생각에는 사용하기에 더 명확합니다. 애플리케이션 구조를 프로그래밍하는 것은 조금 더 어렵지만 어떤 경우에는 더 좋고 명확합니다.


답변

나중에 열거를 사용할 수 있습니다. 그러나 Enum이 도착할 때까지 다음과 같이 할 수 있습니다.

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

  static get values => [APPLE, BANANA];

  Fruit._();
}


답변

이 접근 방식은 어떻습니까?

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;
    }
  }
}


답변

예! 실제로 Dart에서 Enum을 수행하는 데 매우 유용합니다.

  enum fruits{
    BANANA, APPLE, ORANGE
  }


답변

유형 클래스 파일을 사용하십시오.

다트 유형

쉽고, 빠르고, 더 강력하고, 더 유용합니다.

약간의 문제 가 있습니다.이 클래스는 5 개의 다른 선택으로 제한되고 1 개는 null로 작동합니다.