Відповіді:
Примітиви можуть бути перетворені на об'єкти з @()виразом. Таким чином, найкоротший шлях , щоб перетворити intв NSNumberі підібрати строкове представлення з stringValueметодом:
NSString *strValue = [@(myInt) stringValue];
або
NSString *strValue = @(myInt).stringValue;
stringValue, але у всіх є description- тому як хороша практика краще звикнути до використання description( NSNumberтак, тут не потрібно хвилюватися). Спробуйте це ( descriptionнадрукуйте дату, але stringValueбуде збій):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
@(myInt)- це вираз[NSNumber numberWithInt:] у вікні для, і він завжди повертатиме NSNumber при наданні int. [NSNumber stringValue]завжди поверне NSString. У коді вашого коментаря, примусовий прийом (id)і привласнення іншого типу - це явна помилка програмування: ви ніколи цього не повинні робити. Це як замайструвати метод, а потім зробити аргумент щодо цього методу, не виконуючи того, що спочатку робив.
!), і ви зрозумієте, що ви робили це неправильно в Objective-C. Якщо об’єкт testстворений не ви, то це не ваша відповідальність. Ви можете спробувати зателефонувати isKindOfClass:за всіма отриманими параметрами, але навіть це можна обдурити (передаючи структуру замість NSObject, наприклад). Тому не робіть цього: просто явно документуйте очікувані типи.
(id)є помилкою, це було просто продемонструвати те, що IMO descriptionвіддається stringValueперевазі (я можу помилятися, не програмував у ObjC роками)
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
Якщо цей рядок призначений для презентації кінцевому користувачеві, вам слід скористатися NSNumberFormatter. Це додасть тисячі роздільників і вшановує налаштування локалізації для користувача:
NSInteger n = 10000;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:@(n)];
Наприклад, у США це створило б рядок 10,000, а в Німеччині це було б 10.000.
NSString *strValue = @(myInt).stringValue;