Ошибка приведения типа при передаче строки для функции в AS3

Я читаю текстовый файл так:

private function ReadFile():void
    {
        var loadedPage:String;
        var url:URLRequest = new URLRequest("file.txt");
        var loader:URLLoader = new URLLoader();
        loader.load(url);
        loader.addEventListener(Event.COMPLETE, loaderComplete);
        function loaderComplete(e:Event):void
        {
            loadedPage = loader.data;
            //if i trace loadedPage here it works great
            reader(loadedPage);
        }
    }

класс читателя находится в отдельном файле, он выглядит так:

public class reader
{
    var pageContent:String;

    public function reader(loadedPage:String):void
    {
        pageContent = loadedPage;
        read();
    }

    private function read():void
    {
        trace(pageContent);
    }
}

Но там я получаю сообщение об ошибке:

[Ошибка] исключение, информация = TypeError: Ошибка № 1034: Ошибка приведения типа: невозможно преобразовать "Lorem ipsum dolor sit amet, consectetur adipiscing elit

Это то, что файл.txt содержит в первой строке.

Почему я получаю эту ошибку? Я не пытаюсь конвертировать, я просто хочу передать Стингу функцию.


person sprtnbst    schedule 01.10.2015    source источник


Ответы (1)


Вы получили эту ошибку, потому что пытаетесь выполнить приведение ( тип преобразование ) a String в ваш объект reader.

Итак, чтобы избежать этого, вы можете:

  • Используйте экземпляр вашего класса reader. Здесь я должен вам сказать, что имена классов всегда начинаются с заглавной буквы: Reader вместо reader. Подробнее см. здесь.

Итак, для этого случая вы можете сделать (это просто пример, я не понимаю, зачем вам это нужно):

var reader:Reader;

// ...

function loaderComplete(e:Event):void
{
    loadedPage = loader.data;
    reader = new Reader(loadedPage);
}
  • Используйте функцию static, например read(), например:
public class Reader 
{
    // ...

    public static function read(loadedPage:String):void
    {
        trace(loadedPage);
    }
}

Тогда вы можете написать:

function loaderComplete(e:Event):void
{
    loadedPage = loader.data;
    Reader.read(loadedPage);
}

Надеюсь, что это может помочь.

person akmozo    schedule 01.10.2015
comment
или сделать читатель функцией верхнего уровня, что позволит использовать его, как это было сделано в коде в вопросе - person null; 01.10.2015