Создание безопасных коллекций типов во Flex

Я пытаюсь создать класс коллекции во Flex, который ограничен размещением определенного типа данных, которые я использую (интерфейс). Я решил не расширять класс ArrayCollection, так как он слишком общий и на самом деле не дает мне безопасности во время компиляции, которой я добиваюсь. В упрощенной форме моя коллекция содержит массив, и я управляю добавлением и удалением объектов и т. д.

Что я действительно хочу сделать, так это использовать эти коллекции для каждого цикла. Это определенно не кажется таким простым, как, скажем, С#, где вы просто реализуете IEnumerable и IEnumerator (или просто используете универсальную коллекцию). Есть ли способ сделать это в сценарии действия, и если да, то какая-либо информация о том, как это достигается?

Ваше здоровье


person James Hay    schedule 17.03.2009    source источник


Ответы (2)


Вам необходимо расширить класс Flash Proxy. Расширение Proxy позволяет изменить работу get и set, а также циклов for..in и for..each. Дополнительную информацию можно найти в Livedocs.

Вот пример для вашей проблемы:

package
{
    import flash.utils.Proxy;
    import flash.utils.flash_proxy;

    public class EnumerableColl extends Proxy
    {
        private var _coll:Array;

        public function EnumerableColl()
        {
            super();
            _coll = [ 'test1', 'test2', 'test3' ];
        }

        override flash_proxy function nextNameIndex( index:int ):int
        {
            if ( index >= _coll.length ) return 0;
            return index + 1;
        } 


        override flash_proxy function nextValue( index:int ):*
        {
            return _coll[ index - 1];
        }

    }
}
person jmreidy    schedule 17.03.2009
comment
мило... именно то, что я искал, ура вам обоим - person James Hay; 17.03.2009

Взгляните на Vector<>. Это лучшее, что вы можете сделать для типизированной коллекции во Flex (4 и далее). Однако в противном случае вам нужно будет реализовать свой собственный класс. Одним из способов является использование шаблона итератора.

Кроме того, взгляните на этот пост SO.

person dirkgently    schedule 17.03.2009
comment
Да, я программирую для flash 9, поэтому не могу использовать объект Vector. Должен быть способ реализовать какой-то шаблон итератора во flex, поскольку классы ListCollectionView могут использоваться для каждого цикла. - person James Hay; 17.03.2009
comment
Конечно, взгляните на ответ Брайана Хейлина на его собственный вопрос. - person dirkgently; 17.03.2009
comment
Кроме того, Vector.‹› доступен во Flex 3, если вы ориентируетесь на Flash 10. - person Richard Szalay; 17.03.2009