#iphone #objective-c #string #reference #int
#iPhone #objective-c #строка #ссылка #int
Вопрос:
Возможно ли ссылаться на переменную со строкой и int, например:
int number1;
int j = 1;
@"number%i", j = 3; //Hope this makes sense..
Приведенный выше код выдает мне предупреждения и не работает, как это можно было бы сделать.
Я тоже пробовал это, но это не работает (по вполне очевидным причинам):
int j = 1;
NSString *refString = [NSString stringWithFormat:@"number%i", j];
refString = 3;
Я действительно борюсь с этим, я знаю, как это сделать в Javascript, но не в Obj-C, возможно ли это?
Комментарии:
1. Что вы на самом деле пытаетесь сделать?
2. Вы хотите преобразовать целое число в строку? Кроме того,
regString
имеет типNSString*
, которому не могут быть присвоены целые константы, подобные3
.3. На самом деле я написал в круглых скобках прямо рядом с заголовком кода, о котором вы говорите: «но это не работает (по вполне очевидным причинам)»
Ответ №1:
Это антишаблон, который я называю массивом бедняка. Лучший способ сделать это — использовать надлежащую коллекцию, такую как массив, вместо набора переменных, которые тайно связаны. Если все сделано правильно, код с массивом обычно будет намного короче и чище.
Комментарии:
1. Да, я думаю, я сделаю это с массивом, изначально я пытался быть супернастраиваемым с пользовательской настройкой «array», но я понимаю, что это просто стало бы беспорядочным.
2. Или просто создайте простой класс, чтобы избежать «массива с магическими индексами».
Ответ №2:
Из того, что я могу сделать вывод, вы пытаетесь установить / извлечь разные переменные на основе значения j
.
Вы могли бы использовать словарь для этой цели:
NSMutableDictionary *numbers = [NSMutableDictionary dictionary];
int j = 1;
[numbers setObject:[NSNumber numberWithInt:3] forKey:[NSNumber numberWithInt:j]];
А затем извлекать:
[[numbers objectForKey:[NSNumber numberWithInt:j]] intValue];
Это немного многословно, но вы могли бы упростить его, создав небольшой класс.
Комментарии:
1. Это было бы то же самое, что использовать NSArray, он может содержать только объекты NS / UI.. так что это не очень помогло бы … в любом случае, спасибо