Skip to content
Dima Kruk edited this page Feb 8, 2013 · 6 revisions

Enums - языковое расширение, добавляющее поддержку перечисляемых типов в ActionScript3.

Перечисляемый тип состоит из набора именованных значений. Например, перечисляемый тип Cardsuit (карточная масть), может иметь четыре значения SPADES, CLUBS, DIAMONDS, HEARTS.

##Синтаксис

enum enumTypeName [extends enum] [implements Interface] { ENUM1 [, ENUM2, ENUM3 … ] }

Для создания декларации класса Enum Вам необходимо импортировать языковое расширение enum. После этого в контекстном меню пакета появится пункт "New->Enum class". Синтаксис похож на декларацию класса. Константы записываются заглавными буквами через запятую (соглашение по именованию констант такое же как у обычных констант). Также один перечисляемый тип может наследовать другой и/или реализовывать интерфейс.

public enum Cardsuit extends <none> implements <none> {
  SPADES, 
  CLUBS, 
  DIAMONDS, 
  HEARTS 

  public function Cardsuit() { 
    // enum constructor
  } 
}

Constructor

Конструктор Enum, как и конструктор класса, может принимать аргументы. Кроме конструктора, в перечислении могут быть другие методы и поля, как в любом классе.

public enum Cardsuit extends <none> implements <none> {
  SPADES(13), 
  CLUBS(13), 
  DIAMONDS(13), 
  HEARTS(13)

  public function Cardsuit(amount : int) { 
    // будет вызван при создании каждого экземпляра
    _amount = amount; // присвоение аргумента  
  }

  private var _amount : int;

  public function get amount ( ) : int { 
    // getter
    return _amount;
  } 
}

enumTypeName.ENUM[.properties]

К перечислению можно обратиться из любого класса, используя имя типа, константу и, при необходимости, свойство.

public function Main() {
  Cardsuit.SPADES; 
  Cardsuit.CLUBS.amount;
} 

.name :String

Операция .name возвращает строку с именем значения. Она может быть использована для получения имени в методе.

public function Main() { 
  myGetEnum(Cardsuit.DIAMONDS);
} 

public function myGetEnum(myEnum : Cardsuit) : void { 
  myEnum.name; // myEnum.name = "DIAMONDS" 
  myEnum.amount; // DIAMONDS.amount value
}

.index :int

Возвращает индекс значения.

trace Cardsuit.DIAMONDS.index;// 2

.VALUES :list<enumType>

Статическое свойство, возвращающее список всех значений.

Cardsuit.VALUES; //SPADES, CLUBS, DIAMONDS, HEARTS

.NAMES :list<String>

Статическое свойство, возвращающее список всех костант.

Cardsuit.NAMES; // "SPADES", "CLUBS", "DIAMONDS", "HEARTS"

switch enumType case ENUM

Enums очень удобно пользоваться в блоках switch, так как в них можно использовать короткую ссылку на константы.

switch (myEnum) { 
  case SPADES : 
    break; 
  case CLUBS : 
    break; 
  case DIAMONDS : 
    break; 
  case HEARTS : 
    break; 
}

##Аннотации

###[CompactPresentation(name="", color="")] Данная аннотация позволяет указать сокращенное имя для константы.

public enum Cardsuit extends <none> implements <none> {
  [CompactPresentation(name="SPADES")]
  SPADES(13),
  ...
}

После указания аннотации следующий записи будут эквивалентны.

myGetEnum(SPADES);
myGetEnum(Cardsuit.SPADES);

Clone this wiki locally