Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как вогнать кучу статических свойств класса в объект или массив с помощью цикла? (http://www.flasher.ru/forum/showthread.php?t=193789)

yasha005 01.02.2013 12:24

Как вогнать кучу статических свойств класса в объект или массив с помощью цикла?
 
Сабж. Подскажите пожалуйста

Имеется в наличии класс с кучей статических свойств
Код AS3:

package
{
        internal class StaticConstName
        {
                internal static const _kjhghgh:String = 'sdfdsdfm';
                internal static const _sdfgsfdf:String = 'sdfdsdfr';
                internal static const _sdfgfdsdf:String = 'sdfdsdf';
                internal static const _vfgfdsa:String = 'wertre';
                internal static const _dfdsdfgf:String = 'kjhjkjh';
        {
 
{

Как их вогнать в массив или объект?

Мысль у меня вот такая, а как её реализовать чтобы это не выглядело полной лажей, как в нижеследующем примере?
Код AS3:

var i:int = StaticConstName.length; // Как посчитать длину массива, состоящую из статических свойств класса?
var o:Vector.<Object> = new Vector<Object>();
while(--i > -1)
{
        o.push({'StaticConstName.iтый_элемент':StaticConstName.iтый_элемент});
        // Как воткнуть статические свойства класса в массив именно в таком формате {ИмяСтатичСвойства: ЗначениеCтатич.Свойства}
}


DaFive 01.02.2013 12:58

У вас ключи объекта с порядковыми номерами идти должны? Зачем цикл?
Апд: понял. Вам нужно получить все константы класса, не зная какие они и запихнуть их в вектор (массив)?

ChuwY 01.02.2013 13:16

Ну как-то так:

Код AS3:

package
{
        import flash.display.Sprite;
        import flash.utils.describeType;
 
        public class ClassConstsExample extends Sprite
        {
                public function ClassConstsExample()
                {
                        var constMap : Object = getConstMap(StaticClass);                       
 
                        for(var propName : String in constMap)
                        {
                                var value : * = constMap[propName];
                                trace('map[' + propName + '] : ' + value);
                        }
                }
 
                //*** private ***//
                private function getConstNames(classObject : Class):Vector.<String>
                {
                        var type : XML = describeType(classObject);
                        var constants : XMLList = type..constant;
                        var names : Vector.<String> = new Vector.<String>();
 
                        for each(var constant : XML in constants)
                        {
                                names.push(constant.@name);       
                        }
 
                        return names;
                }
 
                private function getConstMap(classObject : Class):Object
                {
                        var constNames : Vector.<String> = getConstNames(classObject);
                        var classConstants : Object = {};
 
                        for each(var constName : String in constNames)
                        {
                                var constValue : * = classObject[constName];
                                classConstants[constName] = constValue;
                        }
 
                        return classConstants;
                }
        }
}
 
internal class StaticClass
{
        public static const PROP_1 : String = "prop_1_value";
        public static const PROP_2 : String = "prop_2_value";
        public static const PROP_3 : String = "prop_3_value";
        public static const PROP_4 : String = "prop_4_value";
        public static const PROP_5 : String = "prop_5_value";
}

На выходе

Код:

map[PROP_3] : prop_3_value
map[PROP_1] : prop_1_value
map[PROP_4] : prop_4_value
map[PROP_2] : prop_2_value
map[PROP_5] : prop_5_value


Котяра 01.02.2013 13:21

Меня терзают смутные сомненья, что на самом деле это автору топика не нужно..
Пусть лучше расскажет какая задача стоит и для чего ему вдруг понадобился такой хак. Наверняка, можно предложить более простое архитектурное решение.

ChuwY 01.02.2013 13:36

Я зачастую создаю массивы статических свойств вручную... в виде статического свойства того же класса :)

yasha005 01.02.2013 13:48

Цитата:

Сообщение от ChuwY (Сообщение 1118802)
Ну как-то так:
...

Спасибо, это то что надо

strangedk 01.02.2013 14:17

Так вам что, совсем не важно как они называются?

yasha005 01.02.2013 16:03

Цитата:

Сообщение от strangedk (Сообщение 1118821)
Так вам что, совсем не важно как они называются?

Мне основная мысль ясна как сиё реализовать, а остальное я "догоню". Спасибо за беспокойство

strangedk 01.02.2013 16:29

Просто если не важно, можно было бы обойтись без массива, называя их value1, value2, value3


Часовой пояс GMT +4, время: 22:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.