Відповіді:
Примітиви можуть бути перетворені на об'єкти з @()
виразом. Таким чином, найкоротший шлях , щоб перетворити 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;