动态创建变量名称

时间:2011-08-15 22:25:57

标签: objective-c string variables dynamic nsstring

在objective-c中有一种动态创建变量名的方法。就像我将一个字符串传递给一个方法,并且该方法创建一个NSString,其名称是传入的字符串。像

这样的东西
-(void)create:(NSString *)str{

NSString *[NSString stringWithFormat:@"%@", str];
}

或者也许有办法改变现有的变量名称。

NSString *password;
password.name = entryPassword;

4 个答案:

答案 0 :(得分:6)

我确信有人会指出一些晦涩的异常,但总的来说,这在任何编译语言中都是不可能的。

答案 1 :(得分:2)

我会调查NSMutableArray

NSMutableArray的大小可以更改,所有对象都保留在其中。

因此,您可以将本地创建的字符串存储在NSMutableArray中,稍后再访问该字符串。

所以你可以拥有一个类型为NSMutableArray的ivar mutableArray,然后你可以存储本地创建的字符串:

//In your init method
mutableArray = [[NSMutableArray alloc] init];
//In your create method:
[mutableArray addObject: [NSString initWithString:str]];

这并不是你所说的,但它可能是你最接近的。 (或者我误解了你的问题)。

答案 2 :(得分:2)

在C#(也是编译语言)中,它被称为反射:http://msdn.microsoft.com/en-us/library/ms173183.aspx,根据定义,您可以“动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型”并调用其方法或访问其字段和属性。“

我不明白为什么人们会问“为什么要做他们想做的事”而不是简单地回答这个问题。

答案 3 :(得分:2)

几个星期前我提出了这个问题并用最大数量的点(mmc)作为事实对待答案,但是在至少1个上下文中你可以在Objective C中动态“创建”变量名称即可。

我的老师,Jacek Lampart向我展示了如何以及我认为我会与其他新手分享。

肉:

// Sample for loop

for(int i=1; i<=3; i++)
{
    // Here you define the format of variable.
    // In this example it’s gonna be blablabla1, blablabla2, blablabla3.

    NSString *targetVariableName = [NSString stringWithFormat:@"blablabla%d", i];

    // Sample UIImageView variable.
    // You assign self.blablabla1 (self.blablabla2 and so on) 
    // to currentVariable in a way, which enables you to work
    // with this object (for example setImage to it etc.).

    UIImageView *currentVariable = [self valueForKey:targetVariableName];

    // […]

    // Profit & DRY power! 
}