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


137

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

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

  NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];

Ответы:


267

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

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


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]это более чистый подход.
Зорайр


76

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

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

NSString *integerAsString1 = [@12 stringValue];

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

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

стриж

var integerAsString = String(integer)

8

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

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

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


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];

0

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

NSInteger value = 12;
NSString * string = [NSString stringWithFormat:@"%0.0f", (float)value];

0

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

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.