2010-09-15 14 views
1

Я здесь немного ...
Я передаю строку функции и в этой функции мне нужно создать массив, чье имя является значением Струна.
Скажите, например: -(void) function : (NSString *) arrayName; //let arrayName = @"foo";
В этой функции мне нужно создать массив с именем «foo» i.e значение переданного параметра.
Может кто-нибудь помочь пожалуйста: |
Заранее спасибо;)динамически создавая имена переменных в объекте-c

+0

Зачем вам нужно иметь переменную NSArray с определенным именем? –

ответ

2

Это невозможно в Objective-C, но вы можете использовать, например. словарь, который отображает строку в массив.

E.g. при условии, что-то вроде следующего свойства:

@property (readonly, retain) NSMutableDictionary *arrays; 

... вы можете хранить массив по имени:

- (void)function:(NSString *)arrayName { 
    NSArray *array = [NSArray arrayWithObjects:@"foo", @"bar", nil]; 
    [self.arrays setObject:array forKey:arrayName]; 
} 

... и доступ к нему так:

NSArray *array = [self.arrays objectForKey:arrayName]; 
2

Массивы дон У меня есть имена. Переменные имеют имена, но переменные являются локальными по своей области, поэтому, когда вы покидаете область действия этого метода, переменная с именем «foo» бессмысленна; вы можете назвать переменную, что хотите, и она будет работать нормально. Пример:

- (void) function:(id)whatever { 
    NSArray * myVariable = [NSArray arrayWithStuff....]; 
    //use myVariable 
} 

Что вы действительно пытаетесь сделать?

+0

эй спасибо за ваше мнение ... :) На самом деле функция рекурсивная по своей природе; поэтому каждый раз, когда я повторяю его, я хочу иметь возможность создавать новый массив без потери предыдущего ... – Bangdel

+1

@Bangdel, если метод рекурсивный, тогда объект все равно будет существовать в фрейме/области, в которой он был создан , Когда вы выйдете из рекурсивного вызова, объект все равно будет там. –

0

C - это скомпилированный язык, на котором любые исходные коды (для переменных, функций и т. Д.) Недоступны во время выполнения (за исключением, возможно, отладки, -g). Среда выполнения Objective C добавляет к этому способность искать методы и классы Obj C по именам, но не объектам, ни какому-либо материалу C. Таким образом, вам не повезло, если вы не создадите собственную структуру мини-языка-интерпретатора для ссылки по имени. Множество способов сделать это, но простые языки обычно создают какую-то таблицу переменных, что-то вроде словаря, массива или связанного списка объектов (структур, кортежей и т. Д.), Содержащих имя строки, указатель объекта (возможно, также тип, размер и т. д.).

Смежные вопросы