Как преобразовать NSInteger в тип данных NSString?

137

Как преобразовать NSIntegerв NSStringтип данных?

Я попробовал следующее, где месяц NSInteger:

  NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];
senthilMuthu
источник

Ответы:

267

NSIntegers не являются объектами, к которым вы приводите их long, чтобы соответствовать определению текущей 64-битной архитектуры:

NSString *inStr = [NSString stringWithFormat: @"%ld", (long)month];

luvieere
источник
11
Я попробовал это, но я продолжал получать предупреждение Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). Вместо этого, согласно Apple Docs , я пошел сNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Стивен
8
Обратите внимание, что на 64-битных процессорах, таких как новый чип A7, если ваше приложение скомпилировано для 64-битных систем, NSInteger на самом деле является long, а не int. Выполнение приведения, (int) month было бы разрушительным для 64-битных платформ для общего случая. Если вы нацелены исключительно на платформы Apple, предпочтите способ Objective-C, как в ответе Алексея Кожевникова, или что-то подобное, которое будет работать как с int, так и с long - например, long ;-). Ответ Лея.
Луи Сент-Амур
1
@Steven Я пытался удалить ответ, чтобы текущие, более применимые, были на поверхности и были приняты, но, очевидно, принятые ответы не могут быть удалены. Поэтому я попытался по крайней мере изменить его содержимое, чтобы предоставить как можно больше полезной информации людям, которые ищут быстрое решение, которое не вызывает предупреждений.
Luvieere
@luvieere Документация Apple четко объясняет, как обращаться с NSInteger в строках формата. Вы должны обновить свой ответ, чтобы следовать этому совету.
Николай Рюэ,
2
[@(integerValue) stringValue]это более чистый подход.
Зорайр
185

Obj-C way =):

NSString *inStr = [@(month) stringValue];
Алексей Кожевников
источник
76

Современная Objective-C

An NSIntegerимеет метод, stringValueкоторый можно использовать даже с литералом

NSString *integerAsString1 = [@12 stringValue];

NSInteger number = 13;
NSString *integerAsString2 = [@(number) stringValue];

Очень просто. Не так ли?

стриж

var integerAsString = String(integer)
MadNik
источник
8

%zdработает для NSIntegers ( %tuдля NSUInteger) без приведений и предупреждений как для 32-разрядных, так и для 64-разрядных архитектур. Я понятия не имею, почему это не « рекомендуемый путь ».

NSString *string = [NSString stringWithFormat:@"%zd", month];

Если вам интересно, почему это работает, посмотрите этот вопрос .

Kevin
источник
5

Простой способ сделать:

NSInteger value = x;
NSString *string = [@(value) stringValue];

Здесь @(value)новообращенные данное NSIntegerна NSNumberобъект , для которого вы можете вызвать необходимую функцию, stringValue.

Картик Дамодара
источник
2

При компиляции с поддержкой arm64, это не сгенерирует предупреждение:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];
Андреас Лей
источник
2

Вы также можете попробовать:

NSInteger month = 1;
NSString *inStr = [NSString stringWithFormat: @"%ld", month];
NeverHopeless
источник
0

Ответ дан, но думаю, что для некоторых ситуаций это будет также интересный способ получить строку из NSInteger.

NSInteger value = 12;
NSString * string = [NSString stringWithFormat:@"%0.0f", (float)value];
Назир
источник
0

NSNumber может быть полезен для вас в этом случае.

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
забияка
источник