Iphone 如何构造和使用变量名?

Iphone 如何构造和使用变量名?,iphone,objective-c,ios,variables,Iphone,Objective C,Ios,Variables,可能重复: 我有10个UILabel,为了简单起见,让它成为label0,label1,…,label9。现在,我正在实现一个循环,我需要从适当的循环周期访问适当的标签: for (int i=0; i<10; i++){ label"i".text = "value of label i"; } for(int i=0;i如何创建这些标签的数组,并使用索引进行迭代?对于每个UILabel您可以保留一个标签标签是一个NSInteger 所以它实际上可能是你的索引号本身 您可以

可能重复:

我有10个UILabel,为了简单起见,让它成为label0,label1,…,label9。现在,我正在实现一个循环,我需要从适当的循环周期访问适当的标签:

for (int i=0; i<10; i++){
  label"i".text = "value of label i";
}   

for(int i=0;i如何创建这些标签的数组,并使用索引进行迭代?

对于每个
UILabel
您可以保留一个
标签
标签
是一个
NSInteger

所以它实际上可能是你的索引号本身


您可以通过在父级
UIView
上调用
viewWithTag:
来访问标签。据我所知,没有像您建议的那样的方法。但是,您可以使用
UILabel
填充
NSMutableArray
,然后调用索引
I
处的对象来检索
I
第个标签

创建
labelArray
(动态或静态),然后将创建
for
循环

for (int i=0; i<10; i++){
  [[labelArray objectAtIndex:i] setText:@"value of label i"];
}   

for(int i=0;i这是一个相当常见的用例。通常,这可以通过使用
NSMutableDictionary维护字符串到对象的映射来解决:

NSMutableDictionary *labelMap = [[NSMutableDictionary alloc] initWithCapacity:10];
[labelMap setObject:[[[UILabel alloc] init] autorelease] forKey:@"label1"];
[labelMap setObject:[[[UILabel alloc] init] autorelease] forKey:@"label2"];
[labelMap setObject:[[[UILabel alloc] init] autorelease] forKey:@"label3"];
// etc
然后,如果要按名称引用对象,请执行以下操作:

for (int i=0; i<10; i++){ 
   NSString *labelKey = [NSString stringWithFormat:@"label%i", i];
   [labelMap objectForKey: labelKey].text = "value of label i";
}

for(int i=0;i我今天刚刚遇到了这个问题。这似乎是您正在寻找的原始优雅解决方案。它不需要任何标记或特殊的可变数组:

for (int i=0; i<10; i++){
    ((UILabel *)NSClassFromString([NSString stringWithFormat:@"label%i", i])).text = @"value of label i";
}

for(int i=0;ii)如果这不是使用ARC,那么每个标签上都会有一个额外的保留,很可能会泄漏。是的。你是对的。LOL——一旦你开始使用ARC,就很容易从内存管理中移开。谢谢。这实际上并没有帮助Centurion更整洁。我不同意。[labelMap objectForKey:@“label1”].text是最简洁的。即使他喜欢更简单的东西——例如使用标记——这仍然是一个有效的选择。不知道为什么你会否决它。有效应该是标准吗?当然,它可以编译,但它绝对是可怕的代码。脆弱、冗长且效率低下。作为一个解决方案,它关注的是错误的东西(“如何将字符串和数字连接到标识符?”)与实际问题(“如何将操作应用于一系列对象?”)相比。使用
eval(“label”+I)
trick在任何语言中都是一种黑客行为。还有:,。我知道也许拥有一系列标签,然后进行迭代将是一种更优雅的解决方案,但我已经结束了保存一些代码并使用您的建议-标记:)查看下面我的新答案。使用NSClassFromString()有一种方法可以完全满足您的需要然而,有趣的方法是,我无法让它工作。我放置了一个带有两行代码的iAction。行“((UILabel*)NSClassFromString([NSString stringWithFormat:@“label%d”,1])。text=@“Value”;不是,而是“self.label1.text=@“text”;“正在工作。我已经尝试过在没有ivar的情况下使用属性label1,以及在没有属性的情况下使用ivar,但仍然不起作用。今天我将整理一些测试代码,并将其推到某个地方供阅读。