Objective-C:For循环变量名称

时间:2018-07-16 16:43:20

标签: objective-c for-loop

我制作了一个显示特定日期待办事项清单的应用。有五个标签显示使用NSUserDefaults保存的字符串。代码看起来像这样:

monday1.stringValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"mo1"];
monday2.stringValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"mo2"];
monday3.stringValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"mo3"];
monday4.stringValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"mo4"];
monday5.stringValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"mo5"];

我的代码中有很多这些行,并且占用了大量空间。我想简化代码。

请注意,每行中的键会增加一,标签标题也会增加一。您可以对objectForKey部分使用for循环,但不能对标签标题使用。至少,这就是我的想法。如果我可以编写这样的代码,它将使我的代码更简洁:

for(int i = 0; i < 5; i++)
    monday-%i.stringValue = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"mo%i", i];

我试图找到一种方法来执行此操作,但是我找不到任何在线内容。没有网站说如何做,但是另一方面,也没有网站说这是不可能的。

那么有谁知道该怎么做?还是不可能?还是其他选择?

1 个答案:

答案 0 :(得分:1)

您无法在运行时构建变量名。

由于变量代表出口,我的建议是使用数组。

NSArray<NSTextField *> *labels = @[monday1, monday2, monday3, monday4, monday5];
for(int i = 0; i < 5; i++) {
    labels[i].stringValue = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"mo%i", i+1]];
}

或者将标签声明为IBOutletCollection,这将在Interface Builder级别上创建数组。

相关问题