Можно ли динамически вызывать переменную в Objective C? - PullRequest
1 голос
/ 11 ноября 2011

Вот объект, имеющий следующий атрибут:

NSString attri1;
NSString attri2;
NSString attri3;
NSString attri4;

Если я хочу перечислить эти атрибуты, я могу позвонить

NSLog(aObj.attri1);

Но могу ли я сделать 1 как переменную для вызова его из цикла? Возможно ли это сделать в target-c?

for(int i = 0; i < [array count]; i++)
{
    NSLog(aObj.attri1); //is this possible to become one line, dynamic generated variable
}

Спасибо. Кстати, как называется эта функция? Благодарю.

Ответы [ 2 ]

3 голосов
/ 11 ноября 2011

Если вы хотите получить динамический доступ к свойству объекта, это можно сделать с помощью Key Value Coding .

Если класс является KVC-совместимым, как и большинство классов NS, вы можете использовать valueForKey: или valueForKeyPath: для доступа к свойству со строкой:

for(int i = 0; i < [array count]; i++) {
    NSLog([[aObj valueForKey:[NSString stringWithFormat:@"attrib%d", i]]);
}
1 голос
/ 11 ноября 2011

Функция, которую вы ищете, обычно называется «переменные переменные». Objective-C не имеет этой функции.На самом деле, большинство языков этого не делают.

Хорошая новость заключается в том, что вам на самом деле не нужна эта функция.Четыре переменные, названные одним и тем же с числом в конце, в основном эквивалентны массиву, только с явной, а не явной структурой.Просто сделайте attri массивом, и тогда вы сможете запросить его для пронумерованного элемента.

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