Actionscript 3.0 Строка с форматом? - PullRequest
23 голосов
/ 19 февраля 2010

Как мне отформатировать строку с предоставленными переменными в AS3?

//vars
var myNumber:Number = 12;
var myString:String = "Months";
var myObject:MovieClip = year;

//string
myString.txt = "One (?) consists of (?) consecutive (?)", string(myObject), string(myNumber), myString;

поэтому в приведенной выше строке я бы хотел, чтобы myString отображал "Один год состоит из 12 последовательных месяцев ", но я новичок в AS3 и не знаю, как правильно отформатировать строку.

Я уверен, что мне придется привести числовую переменную в строку string (myNumber), но я не знаю, вернет ли переменная мувиклипа в строку string (myMovieClip) Название мувиклипа или выдать ошибку. Я готов сделать ставку на потом.

Ответы [ 3 ]

47 голосов
/ 20 февраля 2010

Ответы на этот похожий вопрос предлагают использовать класс Formatter или StringUtil.substitute () .

Последний выглядит самым простым;в вашем случае вы бы использовали его так:

var str:String = "One {0} consists of {1} consecutive {2}";
var newString:String = StringUtil.substitute(str, myObject, myNumber, myString);

substitute() должен автоматически привести свои аргументы к String, но я не уверен, что, как в вашем коде, вы можете привести MovieClip (myObject) в виде строки.

Еще один хороший вариант, особенно если вы использовали printf в других языках программирования, это сторонняя функция printf-as3 .

1 голос
/ 20 февраля 2010

Приведение объектов к строкам

Метод toString () определен в классе Object.Таким образом, для всех объектов этот метод определен для них.Поэтому вызов myObject.toString () обычно даст вам то, что вы ищете.Некоторые объекты определяют дополнительные методы, такие как date.getHours (), которые возвращают строковые описания объекта в формате, отличном от того, который предоставляется getString ().

Для нативных типов, таких как int, вы можете приводить с использованиемString (myInt).

Объединение строк вместе

Затем можно сложить различные части строки следующим образом:

var myString:String = "There are " + String(24) + " hours in a day."

Hopeэто помогает, Дэйв

0 голосов
/ 20 февраля 2010

Короче, как я бы это сделал, что-то вроде:

var finalString:String = "One " + myObject + " consists of " + myNumber + " " + myString;

Одинарная или двойная кавычка инициирует строковый литерал. Если вы используете символ + для добавления чего-либо к строковому литералу, он автоматически вызовет toString () для этого объекта.

myObject вернет [Object MovieClip], хотя. Вам нужно создать собственный класс, который расширяет MovieClip, а затем переопределить защищенный метод toString (), чтобы он возвращал любую строку, которую вы хотите, чтобы он выплевывал.

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

...