Як перетворити 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 , я пішовNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Стівен

8
Зауважте, що на 64-бітних процесорах, таких як новий мікросхем A7, якщо ваша програма складена для 64-розрядних, NSInteger насправді довгий, а не int. Виконання ролі (int) місяця буде руйнівним для 64-бітних платформ для загального випадку. Якщо ви орієнтуєтесь виключно на платформи Apple, віддайте перевагу шляху Objective-C, як у відповіді Олексія Кожевникова, або чогось подібного, що буде працювати як з int, так і з довгими - наприклад, long ;-) Відповідь Лей.
Луї Сент-Амур

1
@Steven Я намагався видалити відповідь, щоб мати поточні, більш застосовні, поверхневі та бути прийнятими, але, мабуть, прийняті відповіді не можна видалити. Тому я намагався принаймні коригувати його вміст, щоб надати якомога більше корисної інформації для людей, які шукають швидке рішення, яке не викликає попереджень.
luvieere

Документація @luvieere Apple чітко пояснює, як поводитися з NSInteger у рядках формату. Ви повинні оновити свою відповідь, щоб дотримуватися цієї поради.
Микола Руге

2
[@(integerValue) stringValue]є більш чистим підходом.
Зорайр


76

Сучасна мета-С

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

1

Ви також можете спробувати:

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.