22011/11/30こんにちは、きんくまです。前回interfaceについて書いたのですけど、書いてて最後に思い出したのでそれをこのエントリーに載せようと思います。前回の最後にiOSやAndroidのネイティブアプリの開発だとinterfaceを使って、イベントが通知されることが多いことを思いだしたのでした。それで、これをAS3で似たように作ってみるとどうなるかです。下の図のような地図を見せるアプリを作るとします。別のクラスからそのイベントを取りたいとします。そこで、そのイベントをinterfaceで定義します。scrollPositionY:Number):void;}}willStartScrollはスクロールを始めたとき、didStopScrollはスクロールが終わったときに実行されます。MapViewのクラスはこうします。_mapMask;}}}中にdelegateというプロパティを用意して、その型をさきほど定義したIMapViewDelegateにします。それで、delegateにイベントを伝えたいときに、その関数を実行します。このMapViewを使うメインクラスはこうなります。+scrollPositionY);}}}mapViewを作ったあとに、自分自身の参照をdelegateに代入しています。これをすると、mapViewのイベントをInterfaceに定義された関数経由で受け取ることができます。mapView側はdelegateの実体がどんなクラスかを知らないのですが、IMapViewDelegateを実装していることを知っているので、その関数を実行することができます。delegateのクラスはどんなクラスでもよいので、柔軟性が高いやり方だと思います。これと同じようなことは、EventDispatcherですることができます。その場合interfaceは必要ありません。SCROLL_STARTとSCROLL_STOPを用意してあげて、イベントを発行したくなったらdispatchします。それを受け取る側はこうです。+map.scrollPositionY);}}}前回はinterfaceを実装していたのですが、今回は不必要になったのでとってしまいました。代わりにaddEventListenerをして、イベントを登録しました。今回はinterfaceとEventDispatcherの2つの仕組みで同じ機能を作ってみました。これの使い分けなんですが、AS3ではEventDispatcherだけで問題ないかと思います。interfaceを使うとEventDisptacherという別のクラスを使わなくてよいので、実行速度が早くなるんじゃないかなと思います。あ、実測したわけじゃないので、適当なこと書いたかも。LINEスタンプ作りました!毎日使える。プログラミングこのブログについてこんにちは。フロントエンドエンジニアです。自作のiPhoneアプリを作っています。