#actionscript #casting
#actionscript #Кастинг
Вопрос:
var tf:TextFormat = myTextField.getTextFormat();
trace(typeof tf.color); // "number"
trace(tf.color is uint); // true
var myColor:uint = tf.color; // error: 1118: Implicit coercion of a value with static type Object to a possibly unrelated type Number.
Почему?
var MyColor:uint = int(tf.color); // работает. Но почему я должен его использовать?
Ответ №1:
Из ссылки на API Adobe:
color:Object
Итак, цвет — это тип объекта, вторая строка отслеживает число как тип, потому что оно было назначено по умолчанию или в коде, но это не обязательно означает, что цвет может быть только числом. Мы также можем присвоить объекту color строковый тип, поэтому типом tf.color может быть число или строка:
tf.color = "0x00ff00";
myTextField.setTextFormat(tf); // Change text color to green
Если мы сравним следующие две строки:
var myColor:uint = "0x00ff00"; // 1067: Implicit coercion of a value of type String to an unrelated type uint.
var myColor:uint = tf.color; // 1118: Implicit coercion of a value with static type Object to a possibly unrelated type Number.
// var myColor:uint = new Object(); // This line gives same 1118: Implicit coercion of a value with static type Object to a possibly unrelated type uint.
Мы видим, что компилятор жалуется на то, что ему нужны явные инструкции для выполнения преобразования. С этого момента у нас есть достаточно оснований полагать, что компилятор разработан таким, какой он есть. Также обратите внимание, что вы можете использовать конструктор uint или int для преобразования объекта в число. uint и int являются производными классами Object .
var myColor:uint = new uint(tf.color);
Я надеюсь, что это пролило свет.
Комментарии:
1. Блестяще! Спасибо за отличный ответ.