Преобразовать строку + число в объект - PullRequest
0 голосов
/ 01 июля 2010

Я новичок в Obj C, но знаком с ООП. Я работаю над игрой, которая использует обнаружение столкновений, чтобы набирать очки и изменять свойства UIImageView, такие как цвет фона.

У меня есть конечное число UIImageViews, которые являются подпредставлениями большего представления. Я могу вручную проверить наличие коллизий и установить цвета фона UIImageViews соответственно. Проблема в том, что это создает довольно большой блок if / else, который, как я вижу, выходит из-под контроля. В JavaScript я могу использовать цикл for и eval () для вычисления строки + i (цикл var), а затем просто вызвать новый var.backgroundColor = someColor;

Кажется, что eval не используется в OBJ C, поэтому я ищу эквивалент, который позволит мне создать цикл, который выполняет тот же блок кода для данного объекта, который отличается от других объектов только именем:

Пример:

if (someStatement == true) { object_01.someProperty = newProperty; } else if (someOtherStatement == true) { object_02.someProperty = newProperty; } else if (someOtherOtherStatement == true) { object_03.someProperty = newProperty; }

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

Любая помощь с благодарностью!

Damon

Ответы [ 2 ]

0 голосов
/ 01 июля 2010

Лучший способ - поместить object_01, object_02, ... в массив и затем использовать `- [NSArray objectAtIndex:] для доступа к объектам.

Вы также можете использовать Кодирование значения ключа :

NSString *keyPath = [NSString stringWithFormat:@"object_0%d.someProperty", objectIndex];
[self setValue:newProperty forKeyPath:keyPath];

Но, как упоминал rpetrich, это не очень хороший стиль программирования.

0 голосов
/ 01 июля 2010

Создание массива:

NSMutableArray *items = [NSMutableArray array];

Заполнение массива CGRect s:

[items addObject:[NSValue valueWithCGRect:frame]];

Извлечение CGRect из массива:

CGRect frame = [[items objectAtIndex:0] CGRectValue];

Замена индекса в массиве:

[items replaceObjectAtIndex:0 withObject:[NSValue valueWithCGRect:frame]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...