Як конвертувати int в NSString?


101

Я хотів би перетворити intна NSStringв "Об'єктив C."

Як я можу це зробити?

Відповіді:


147

Примітиви можуть бути перетворені на об'єкти з @()виразом. Таким чином, найкоротший шлях , щоб перетворити intв NSNumberі підібрати строкове представлення з stringValueметодом:

NSString *strValue = [@(myInt) stringValue];

або

NSString *strValue = @(myInt).stringValue;

12
Трохи менш багатослівний:NSString *strValue = @(myInt).stringValue;
Distortum

@DielsonSales деяких об’єктів немає stringValue, але у всіх є description- тому як хороша практика краще звикнути до використання description( NSNumberтак, тут не потрібно хвилюватися). Спробуйте це ( descriptionнадрукуйте дату, але stringValueбуде збій):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
Іслам Q.

1
@IslamQ. @(myInt)- це вираз[NSNumber numberWithInt:] у вікні для, і він завжди повертатиме NSNumber при наданні int. [NSNumber stringValue]завжди поверне NSString. У коді вашого коментаря, примусовий прийом (id)і привласнення іншого типу - це явна помилка програмування: ви ніколи цього не повинні робити. Це як замайструвати метод, а потім зробити аргумент щодо цього методу, не виконуючи того, що спочатку робив.
Cœur

1
@IslamQ. Спробуйте перетворити свій коментар у Swift, не використовуючи оператора збоїв ( !), і ви зрозумієте, що ви робили це неправильно в Objective-C. Якщо об’єкт testстворений не ви, то це не ваша відповідальність. Ви можете спробувати зателефонувати isKindOfClass:за всіма отриманими параметрами, але навіть це можна обдурити (передаючи структуру замість NSObject, наприклад). Тому не робіть цього: просто явно документуйте очікувані типи.
Cœur

@ Cœur, звичайно, кидання об'єкта (id)є помилкою, це було просто продемонструвати те, що IMO descriptionвіддається stringValueперевазі (я можу помилятися, не програмував у ObjC роками)
Islam Q.

144
NSString *string = [NSString stringWithFormat:@"%d", theinteger];

@Elist, коли ви знаєте примітивний тип, мені цікаво, чи може бути трохи менше накладних витрат, уникаючи проміжного NSNumber від вашого коду? вираження@(myInt) в коробці , воно повертає NSNumber.
Cœur

37
int i = 25;
NSString *myString = [NSString stringWithFormat:@"%d",i];

Це один із багатьох способів.


2

Якщо цей рядок призначений для презентації кінцевому користувачеві, вам слід скористатися NSNumberFormatter. Це додасть тисячі роздільників і вшановує налаштування локалізації для користувача:

NSInteger n = 10000;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:@(n)];

Наприклад, у США це створило б рядок 10,000, а в Німеччині це було б 10.000.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.