Начиная с 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 enumsfor (List<Fruit> value in Fruit.values) {
print(value);
}
// get the second valueprint(Fruit.values[1]);
}
Использование constне всегда возможно (если перечисление построено с атрибутами, которых не может быть const). Вот почему я не использовал его в своем ответе (хотя иногда я использую constenum в своем коде).
Александр Ардхуин
Я приму этот ответ, потому что, безусловно, будет полезно использовать тип
psuedo
2
@KaiSellgren Примечание. Я думаю, что руководство по стилю теперь изменилось, поэтому значения enum должны быть в нижнем регистре, а не в верхнем регистре. См. Dartlang.org/articles/style-guide/…
Грег Лоу
2
Что List<Fruit> value?
Том Рассел
1
Вы, наверное, for (Fruit value in Fruit.values)
хотели
9
С r41815 Dart получил встроенную поддержку Enum, см. Http://dartbug.com/21416 и может использоваться как
... for the technology preview it was decided to leave it out and just
use staticfinal fields for now. It may be added later.
Вы все еще можете сделать что-то вроде этого:
interfaceConnectionState{ }
classConnectedimplementsConnectionState{ }
classConnectingimplementsConnectionState{ }
classDisconnectedimplementsConnectionState{ }
//later
ConnectionState connectionState;
if (connectionState is Connecting) { ... }
который, на мой взгляд, более понятен для использования. Программировать структуру приложения немного сложнее, но в некоторых случаях лучше и понятнее.
Сам я бы так не поступил. Я бы сохранил имя в верхнем регистре, как Fruit.APPLE. Затем, если мне нужен текстовый вывод, у меня будет карта, которая переводит их, или некоторая языковая поддержка отдельно, если я хочу поддерживать и другие языки. Я также считаю, что switchоператоры лучше всего работают с целыми числами, потому что тогда они могут быть скомпилированы в таблицу переходов.
Кай Селлгрен
0
Да! На самом деле очень полезно делать Enums в Dart:
Ответы:
Начиная с 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)
С 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]}'); }
Ограничение состоит в том, что невозможно установить собственные значения для элемента перечисления, они автоматически нумеруются.
Более подробная информация в этом проекте 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
операторы лучше всего работают с целыми числами, потому что тогда они могут быть скомпилированы в таблицу переходов.Да! На самом деле очень полезно делать Enums в Dart:
enum fruits{ BANANA, APPLE, ORANGE }
источник
Просто используйте файл классов типов.
Типы дротиков
проще, быстрее, мощнее и полезнее.
небольшая проблема, этот класс ограничен пятью разными вариантами выбора и плюс один для действий как null.
источник