続・XMLのロードでnullが返ってくる(解決)

前回のエントリー「XMLのロードでnullが返ってくる」で as 演算子と クラス名(target)の違いについて調べてみた。

as演算子によるとキャストできなかった場合にnullが返ってくるかエラーになるかの違いらしい。
でも前回の場合、as の場合はnull で括弧を使った場合は読み込めるっていう感じだった。

あ、野中さんの記事発見。

as演算子は、キャストに利用することができます。ただし、データ自体を変えることはありません。データを変更しなければデータ型が変換できない場合には、nullを返します。

ていうことは、、、

あぁ、やっと気づいた。
つーかURLLoaderでテキストで読み込んでるんだからStringだよね。
バカバカバカ!!!

通常はこうするのね。

function init():void
{
	var l:URLLoader = new URLLoader();
	l.addEventListener(Event.COMPLETE,onLoadComplete);
	l.load(new URLRequest("tinco.xml"));
}

function onLoadComplete(e:Event):void
{
	var xml:XML = new XML(e.target.data);
}

あふぉーなオレはこうしていました。

function init():void
{
	var l:URLLoader = new URLLoader();
	l.addEventListener(Event.COMPLETE,onLoadComplete);
	l.load(new URLRequest("tinco.xml"));
}

function onLoadComplete(e:Event):void
{
	var xml:XML = XML(e.target.data); // これでも一応XMLに変換できたけど
}

対象ファイルの拡張子とか中身がXML表記でも読み込まれた時はString型なわけ。
URLLoaderのロードしたデータがString型なのに「これはXMLだ!」って言いはっていたわけ。
as演算子を使うとそんなウソは通用しません!っていうことで一件落着。

ちなみにこの記事「【AS3入門】as演算子とカッコ()を使ったキャストの違いCommentsAdd Star」はとても参考になりました。

Tags: ,

The URL to TrackBack this entry is:

コメントをどうぞ