Расширенный enum
Расширенный enum (enhanced enum) в Dart - это перечисление, которое, в отличие от обычного, может содержать поля, конструкторы, методы, геттеры и реализовывать интерфейсы. Каждый элемент такого перечисления является экземпляром класса перечисления, поэтому может хранить собственные данные и иметь поведение. В конструктор элемента мы передаем значения для его полей, а через методы и геттеры получаем доступ к этим значениям.
Синтаксис
enum Name {
value1(args),
value2(args);
final Type field;
const Name(this.field);
Type method() {
// body
}
}
Пример
Давайте создадим расширенный enum с полем и конструктором, а затем выведем значения его элементов:
enum Color {
red('red'),
green('green'),
blue('blue');
final String title;
const Color(this.title);
}
void main()
{
print(Color.red.title);
print(Color.green.title);
print(Color.blue.title);
}
Результат выполнения кода:
"red"
"green"
"blue"
Пример
Давайте добавим в расширенный enum метод, который возвращает описание элемента:
enum Color {
red('red'),
green('green'),
blue('blue');
final String title;
const Color(this.title);
String describe() {
return 'Color is $title';
}
}
void main()
{
print(Color.red.describe());
print(Color.blue.describe());
}
Результат выполнения кода:
"Color is red"
"Color is blue"
Пример
Давайте переопределим метод toString внутри
расширенного enum, чтобы при выводе элемента
получать его понятное представление:
enum Color {
red('red'),
green('green'),
blue('blue');
final String title;
const Color(this.title);
@override
String toString() {
return title;
}
}
void main()
{
print(Color.red);
print(Color.green);
}
Результат выполнения кода:
"red"
"green"
Пример
Давайте переберём все элементы расширенного enum
через свойство values и выведем их поля:
enum Color {
red('red'),
green('green'),
blue('blue');
final String title;
const Color(this.title);
}
void main()
{
for (Color color in Color.values) {
print(color.title);
}
}
Результат выполнения кода:
"red"
"green"
"blue"
Смотрите также
-
класс
enum,
который представляет обычные перечисления -
ключевое слово
const-constructor,
которое задаёт константный конструктор -
ключевое слово
static,
которое объявляет статические члены класса -
метод
toString,
который возвращает строковое представление объекта