Я пытаюсь создать класс коллекции во Flex, который ограничен размещением определенного типа данных, которые я использую (интерфейс). Я решил не расширять класс ArrayCollection, так как он слишком общий и на самом деле не дает мне безопасности во время компиляции, которой я добиваюсь. В упрощенной форме моя коллекция содержит массив, и я управляю добавлением и удалением объектов и т. д.
Что я действительно хочу сделать, так это использовать эти коллекции для каждого цикла. Это определенно не кажется таким простым, как, скажем, С#, где вы просто реализуете IEnumerable и IEnumerator (или просто используете универсальную коллекцию). Есть ли способ сделать это в сценарии действия, и если да, то какая-либо информация о том, как это достигается?
Ваше здоровье
Ответ 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.