Почему TextFormat.color не является числом?

#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. Блестяще! Спасибо за отличный ответ.