Динамически создавать имя переменной - PullRequest
1 голос
/ 16 августа 2011

В target-c есть способ динамически создавать имя переменной. Как я передаю строку в метод, и метод создает NSString, имя которого является строкой, которая была передана. Что-то вроде

-(void)create:(NSString *)str{

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

Или, может быть, есть способ изменить имя уже существующей переменной.

NSString *password;
password.name = entryPassword;

Ответы [ 4 ]

6 голосов
/ 16 августа 2011

Я уверен, что кто-то укажет на какое-то неясное исключение, но в целом это невозможно на любом скомпилированном языке.

2 голосов
/ 01 декабря 2013

Я пришел к этому вопросу несколько недель назад и обработал ответ с наибольшим количеством точек (по mmc) как факт, но хотя бы в одном контексте вы можете динамически «создать» имя переменной в Задаче C.

Мой учитель, Яцек Лампарт , показал мне, как, и я подумал, что поделюсь им с другими новичками.

Мясо:

// 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! 
}
2 голосов
/ 30 сентября 2012

В C # (также скомпилированном языке) это называется отражением: http://msdn.microsoft.com/en-us/library/ms173183.aspx, и по определению вы можете «динамически создавать экземпляр типа, связывать тип с существующим объектом или получать тип из существующего». объект и вызвать его методы или получить доступ к его полям и свойствам. "

Я не понимаю, почему люди спрашивают «почему кто-то хочет делать то, что они хотят» вместо простого ответа на вопрос.

2 голосов
/ 16 августа 2011

Я бы посмотрел в NSMutableArray .

Размер NSMutableArray может измениться, и все объекты будут сохранены в нем.

Таким образом, вы можете хранить локально созданные строки внутриNSMutableArray и получите доступ к строке позже.

Таким образом, у вас может быть массив переменных типа ivar типа NSMutableArray, а затем вы можете хранить локально созданные строки:

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

Это не подходитименно то, что вы говорите, но это, вероятно, самое близкое, что вы собираетесь получить.(Или я неправильно понимаю ваш вопрос).

...