Простое программирование - вопрос синтаксиса Objective C - PullRequest
0 голосов
/ 17 декабря 2009

Два полных вопроса новичка о программировании в ObjC - с использованием идей других языков, которые я использовал в прошлом. Было бы замечательно, если бы такие понятия существовали в ObjC, но вся информация, которую я смог собрать до сих пор, связана с простыми вещами, такими как циклы for и т. Д.

Вопрос 1

Есть ли в Задаче C способ оценки переменной перед выполнением строки?

Например, допустим, у меня есть 5 ярлыков, для которых я хочу изменить текст. Я мог бы сделать что-то вроде:

Label1.text = array(1)
Label2.text = array(2)
Label3.text = array(3)
Label4.text = array(4)
Label5.text = array(5)

но то, что я ДЕЙСТВИТЕЛЬНО хочу сделать, это:

for (x=0; x<=5; x++) {
Label'x'.text = array(x)
}

Возможно ли это даже в Задаче C? Если да, есть идеи, как это называется или каков синтаксис?

Вопрос 2

В связи с вышесказанным, есть ли способ сделать что-то подобное с объектами?

пример:

foo = objectA
'foo'.textcolor = red
foo = objectB
'foo'.textcolor = green

так что ... тогда есть 2 объекта с разными цветами текста -

объект A красный, объект B зеленый. foo - это просто «заполнитель» или «stand-in» объект без каких-либо свойств.

Имеет ли что-нибудь из этого смысл для кого-то еще?

LOL

Заранее спасибо,

-Leevy

Ответы [ 3 ]

3 голосов
/ 17 декабря 2009

Оба невозможны.

Вопрос 1

Что вы действительно должны делать, так это использовать массив для хранения меток. И отдельный массив для значений.

Вопрос 2

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

Причина

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

2 голосов
/ 17 декабря 2009

Вопрос 1

Я бы не рекомендовал это, но если вы действительно хотите это сделать, и если ваши ярлыки выставлены как свойства:


int i;
NSArray *myArray = [NSArray arrayWithObjects:@"Text1", @"Text2", @"Text3", @"Text4", @"Text5", nil];

for (i = 0; i < 5; i++)
{
    SEL aSel = NSSelectorFromString([NSString stringWithFormat:@"Label%d", i + 1]);
    [[self performSelector:aSel] setText:[myArray objectAtIndex:i]];
}

NB

Не тестировалось.

0 голосов
/ 17 декабря 2009

Вопрос 1

Возможно, вы могли бы сделать что-то вроде этого:

LABEL Label1;
LABEL Label2;
LABEL Label3;
LABEL Label4;
LABEL Label5;

LABEL *Labels = &Label1;

for(int i = 0; i < 5; i++)
    Labels[i].text = array(i);

Однако, если это когда-нибудь сработает, то гарантированно, что оно НЕ ВСЕГДА будет работать, и я не предлагаю его использовать. Работает ли это или нет, зависит от того, как компилятор резервирует пространство для меток (что меняется от компилятора к компилятору и от настроек компилятора к настройкам компилятора).

Вопрос 2

Самая близкая вещь к этому вопросу, о которой я могу подумать, это:

Поскольку вы хотите установить цвет текста двух объектов, я предполагаю, что их поведение связано. Если objectA и objectB являются двумя объектами одного класса, вы можете сделать

TheClass *objectA = [[TheClass alloc] init];
TheClass *objectB = [[TheClass alloc] init];

TheClass *foo = objectA;

[foo setTextColor:RED];
foo = objectB;
[foo setTextColor:BLUE];

Если они НЕ являются объектами одного и того же класса, вы можете получить их наследование от одного и того же суперкласса и сделать что-то вроде этого:

SubClassA *objectA = [[SubClassA alloc] init];
SubClassB *objectB = [[SubClassB alloc] init];
SuperClass *foo = objectA;

[foo setTextColor:RED];
foo = objectB;
[foo setTextColor:BLUE];

Реализация setTextColor будет отличаться во всех 3 классах. В SuperClass это была бы пустая функция, в то время как в двух классах SubClass это было бы специфично для Class.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...