简易编程 - Objective C语法问题

时间:2009-12-17 05:17:02

标签: objective-c iphone

关于ObjC编程的两个完整的新手问题 - 使用我过去使用的其他语言的想法。如果在ObjC中存在这样的概念会很棒,但到目前为止我能够收集到的所有信息都是关于“for”循环等简单的东西。

问题1

在目标C中,在执行一行之前是否有先评估变量的方法?

例如,假设我有5个标签,我想要更改文本。我可以做类似的事情:

Label1.text = array(1)
Label2.text = array(2)
Label3.text = array(3)
Label4.text = array(4)
Label5.text = array(5)

但我真正想做的是:

for (x=0; x<=5; x++) {
Label'x'.text = array(x)
}

这在Objective C中是否可行?如果是这样,任何想法是什么或语法是什么?

问题2

与上述相关,有没有办法与对象做类似的事情?

示例:

foo = objectA
'foo'.textcolor = red
foo = objectB
'foo'.textcolor = green

所以...然后有2个具有不同文本颜色的对象 -

objectA为红色,objectB为绿色。 foo只是一个“占位符”或“替身”对象,没有任何属性本身。

这对任何人都有意义吗?

LOL

提前致谢,

-Leevy

3 个答案:

答案 0 :(得分:3)

两者都不可能。

问题1

您真正应该做的是使用数组来存储标签。还有一个单独的值数组。

问题2

我想不出这种情况真的有必要,最后这可能会引入一些很难发现的错误。

原因

在大多数编译的编程语言中,名称仅适用于开发人员。使用编译器后,它们将转换为地址,并且变量的名称将丢失。

答案 1 :(得分:2)

问题1

我不推荐这个,但是如果你真的想这样做,并且你的标签是作为属性公开的:


int i;
NSArray *myArray = [NSArray arrayWithObjects:@"Text1", @"Text2", @"Text3", @"Text4", @"Text5", nil];

for (i = 0; i < 5; i++)
{
    SEL aSel = NSSelectorFromString([NSString stringWithFormat:@"Label%d", i + 1]);
    [[self performSelector:aSel] setText:[myArray objectAtIndex:i]];
}

NB

未经测试。

答案 2 :(得分:-1)

问题1

你可以这样做:

LABEL Label1;
LABEL Label2;
LABEL Label3;
LABEL Label4;
LABEL Label5;

LABEL *Labels = &Label1;

for(int i = 0; i < 5; i++)
    Labels[i].text = array(i);

但是,如果这种情况有效,则可以保证它不会始终有效,我建议不要使用它。这是否有效取决于编译器如何为标签保留空间(从编译器到编译器以及从编译器设置到编译器设置的变化)。

问题2

我能想到的最接近这个问题的是:

由于您要设置两个对象的文本颜色,我假设它们的行为是相关的。如果 objectA objectB 是同一个类的两个对象,则可以执行

TheClass *objectA = [[TheClass alloc] init];
TheClass *objectB = [[TheClass alloc] init];

TheClass *foo = objectA;

[foo setTextColor:RED];
foo = objectB;
[foo setTextColor:BLUE];

如果它们不是同一个类的对象,你可以让它们从同一个超类继承,并做这样的事情:

SubClassA *objectA = [[SubClassA alloc] init];
SubClassB *objectB = [[SubClassB alloc] init];
SuperClass *foo = objectA;

[foo setTextColor:RED];
foo = objectB;
[foo setTextColor:BLUE];

setTextColor的实现在所有3个类中都是不同的。在SuperClass中它将是一个空函数,而在两个SubClass类中它将特定于Class。