2009-03-17 3 views
4

Flexで、使用している特定のタイプのデータ(インターフェイス)に限定されたコレクションクラスを作成しようとしています。私はArrayCollectionクラスを拡張しないことを選択しました。なぜなら、あまりにも一般的で、実際にコンパイル時の安全性を私に与えないからです。私のコレクションには配列が含まれているという単純な形で、オブジェクトの追加や削除などの方法を管理します。Flexで型セーフなコレクションを作成する

私が本当にやりたいことは、それぞれのループでこれらのコレクションを使用することです。 IEnumerableとIEnumeratorを実装している(または単に汎用コレクションを使用している)C#とまったく同じようには思えません。アクションスクリプトでこれを行う方法はありますか?それが達成された方法についての情報があれば?

乾杯

答えて

2

Flash Proxyクラスを拡張する必要があります。 Extending Proxyでは、 'for ... in'と 'for..each'ループだけでなく、 'get'と 'set'の動作を変更することができます。

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]; 
     } 

    } 
} 
+0

sweet ...私はあなたが探していたものだけでなく、 –

2

Vector<>をご覧ください。これは、Flexの型指定されたコレクション(4つ以上)の場合と同じくらいです。ただし、それ以外の場合は独自のクラスを実装する必要があります。 1つの方法は、Iterator Patternを使用することです。

また、this SO postをご覧ください。

+0

うん、私はVectorオブジェクトを使用することはできませんので、フラッシュ9のためにプログラミングしています:あなたはここにon the Livedocs.

があなたの問題の例です詳細を見つけることができます。各ループに対してListCollectionViewクラスを使用できるように、ある種の反復子パターンを実装する方法が必要です。 –

+0

確かに、ブライアン・ヘイリンの答えを見てください。 – dirkgently

+0

また、Vector。<>は、Flash 10をターゲットにしている限り、Flex 3で使用できます。 –

関連する問題