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 enumsfor (List<Fruit> value in Fruit.values) {
print(value);
}
// get the second valueprint(Fruit.values[1]);
}
Essas constantes estáticas dentro da classe são constantes de tempo de compilação, e essa classe agora pode ser usada, por exemplo, em switchinstruções:
var a = Fruit.APPLE;
switch (a) {
case Fruit.APPLE:
print('Yes!');
break;
}
Usar constnem sempre é possível (se o enum for construído com atributos que não podem ser const). É por isso que não usei em minha resposta (embora às vezes use constenum em meu código).
Alexandre Ardhuin
Aceitarei
2
@KaiSellgren Observação: acho que o guia de estilo agora mudou, então os valores enum devem ser minúsculos camel case em vez de maiúscula. Veja dartlang.org/articles/style-guide/…
Greg Lowe
2
O que é List<Fruit> value?
Tom Russell
1
Você provavelmente pretendia escrever for (Fruit value in Fruit.values), caso contrário, o Dart mostra um erro
claro
9
Com r41815, o Dart obteve suporte para Enum nativo, consulte http://dartbug.com/21416 e pode ser usado como
Eu não faria isso sozinho. Eu manteria o nome em maiúsculas como Fruit.APPLE. Então, se eu quisesse uma saída textual, eu teria um mapa que os traduz ou algum suporte de idioma separadamente se eu quisesse oferecer suporte a outros idiomas também. Também acho que as switchinstruções funcionam melhor em inteiros, porque assim podem ser compiladas em uma tabela de salto.
Kai Sellgren
0
Sim! Na verdade, é muito útil fazer Enums no Dart:
Respostas:
A partir do 1.8 , você pode usar enums como este:
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]); }
A abordagem antiga antes de 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); }
Essas constantes estáticas dentro da classe são constantes de tempo de compilação, e essa classe agora pode ser usada, por exemplo, em
switch
instruções:var a = Fruit.APPLE; switch (a) { case Fruit.APPLE: print('Yes!'); break; }
fonte
const
nem sempre é possível (se o enum for construído com atributos que não podem serconst
). É por isso que não usei em minha resposta (embora às vezes useconst
enum em meu código).List<Fruit> value
?for (Fruit value in Fruit.values)
, caso contrário, o Dart mostra um erroCom r41815, o Dart obteve suporte para Enum nativo, consulte http://dartbug.com/21416 e pode ser usado como
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]}'); }
Uma limitação é que não é possível definir valores personalizados para um item enum, eles são numerados automaticamente.
Mais detalhes neste rascunho https://www.dartlang.org/docs/spec/EnumsTC52draft.pdf
fonte
Esta e esta podem ser as respostas à sua pergunta:
... for the technology preview it was decided to leave it out and just use static final fields for now. It may be added later.
Você ainda pode fazer algo assim:
interface ConnectionState { } class Connected implements ConnectionState { } class Connecting implements ConnectionState { } class Disconnected implements ConnectionState { } //later ConnectionState connectionState; if (connectionState is Connecting) { ... }
o que na minha opinião é mais claro para uso. É um pouco mais difícil para programar a estrutura do aplicativo, mas em alguns casos, é melhor e claro.
fonte
A enumeração deve estar disponível no futuro. Mas até Enum aterrissar, você pode fazer algo como:
class Fruit { static final APPLE = new Fruit._(); static final BANANA = new Fruit._(); static get values => [APPLE, BANANA]; Fruit._(); }
fonte
que tal esta abordagem:
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; } } }
fonte
Fruit.APPLE
. Então, se eu quisesse uma saída textual, eu teria um mapa que os traduz ou algum suporte de idioma separadamente se eu quisesse oferecer suporte a outros idiomas também. Também acho que asswitch
instruções funcionam melhor em inteiros, porque assim podem ser compiladas em uma tabela de salto.Sim! Na verdade, é muito útil fazer Enums no Dart:
enum fruits{ BANANA, APPLE, ORANGE }
fonte
Basta usar o arquivo de classe de tipos.
Tipos de dardo
fácil, rápido, mais poderoso e mais útil.
probleminha, é essa classe limitada a cinco Different Choice e mais uma para atuar como nula.
fonte