Dart는 열거를 지원합니까? 예를 들면 :
enum myFruitEnum { Apple, Banana }
문서에 대한 간단한 검색은 아니오를 제안합니다.
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;
}
const
(열거가 될 수 없다 속성으로 내장되어있는 경우 항상 가능한 것은 아니다 const
). 그래서 나는 내 대답에 그것을 사용하지 않았습니다 (때로는 const
내 코드에서 enum을 사용하지만 ).
List<Fruit> value
?
for (Fruit value in Fruit.values)
. 그렇지 않으면 Dart가 오류를 보여줍니다
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;
}
}
}
Fruit.APPLE
. 그런 다음 텍스트 출력을 원하면 다른 언어도 지원하려는 경우 번역하는 맵이나 일부 언어 지원을 개별적으로 사용합니다. 또한 switch
문은 정수에서 가장 잘 작동 한다고 생각합니다 . 그러면 점프 테이블로 컴파일 될 수 있기 때문입니다.
예! 실제로 Dart에서 Enum을 수행하는 데 매우 유용합니다.
enum fruits{
BANANA, APPLE, ORANGE
}