2015-04-10 7 views
3

Прежде чем перечисления были доступны в Dart, я написал несколько громоздких и сложных для поддержания кода для имитации перечислений и теперь хочу упростить его. Мне нужно получить значение перечисления в виде строки, например, с помощью Java, но не может.Dart Как получить «значение» перечисления

Например маленький тест фрагмент коды возвращает «day.MONDAY» в каждом случае, когда то, что я хочу есть «Понедельник»

enum day {MONDAY, TUESDAY} 
print('Today is $day.MONDAY'); 
print('Today is $day.MONDAY.toString()'); 

Я правильно, что, чтобы получить только „Понедельник“ мне нужно будет разбор ?. строка

+0

И нет итератора? –

ответ

6

к сожалению, вы правы, что метод ToString возвращает "day.MONDAY", а не более полезным "MONDAY" вы можете получить остальную часть строки как:

day theDay = day.MONDAY;  
print("${theDay.toString().substring(theDay.toString().indexOf('.')+1)}"); 

Вряд ли удобный, правда.

Если вы хотите перебрать все значения, вы можете сделать это с помощью day.values:

for (day theDay in day.values) { 
    print(theDay); 
} 
+0

Старые способы перечисления http://stackoverflow.com/questions/15854549 предлагают большую гибкость, но не могут использоваться как константы. Создание библиотеки и импорт ее с помощью префикса позволяет обойти это (см. Этот ответ в выровненном вопросе выше http://stackoverflow.com/a/15855913/217408). –

+0

В чем проблема с использованием экземпляров «enum-class» в качестве констант? – lrn

+0

Не должно возникать никаких проблем при создании экземпляров const класса и их наличии в качестве статических членов-констант - это то, что делает реализация перечисления языка: // class MyEnum {static const MyEnum someItem = const MyEnum (0); static const MyEnum someOtherItem = const MyEnum (1); final int id; const MyEnum (this.id); } ' – lrn

Смежные вопросы