这可以在Objective C中动态调用变量吗?

时间:2011-11-11 06:52:05

标签: objective-c variables

这是对象,并具有以下属性:

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

如果我想列出这些attri,我可以致电

NSLog(aObj.attri1);

但是我可以将1作为变量从循环中调用它吗?这是否可以在objective-c中这样做?

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

谢谢。顺便问一下,这个功能叫做什么?谢谢。

2 个答案:

答案 0 :(得分:3)

如果要动态访问对象的属性,可以使用Key Value Coding来完成。

如果该类与KVC兼容,就像大多数NS类一样,您可以使用valueForKey:valueForKeyPath:来访问带有字符串的属性:

for(int i = 0; i < [array count]; i++) {
    NSLog([[aObj valueForKey:[NSString stringWithFormat:@"attrib%d", i]]);
}

答案 1 :(得分:1)

您正在寻找的功能通常称为"variable variables." Objective-C没有此功能。实际上,大多数语言都没有。

好消息是你实际上并不需要这个功能。四个变量命名相同的东西,最后一个数字基本上等同于一个数组,只有结构是隐式的而不是显式的。只需将attri设为一个数组,然后就可以询问它是否有编号的项目。