Создание безопасных коллекций типов в Flex - PullRequest
4 голосов
/ 17 марта 2009

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

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

Приветствия

Ответы [ 2 ]

2 голосов
/ 17 марта 2009

Вам необходимо расширить класс 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];
        }

    }
}
2 голосов
/ 17 марта 2009

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

Кроме того, взгляните на этот ТАК. Пост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...