Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: James HayОтветов: 2

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

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

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

collectionsapache-flex

Ответы

Ответ 1 · рейтинг 2 · jmreidy

Вам необходимо расширить класс 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 · рейтинг 2 · dirkgently

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы