Как преобразовать int в NSString?

101

Я хотел бы преобразовать intк NSStringв Objective C.

Как я могу это сделать?

Йогини
источник

Ответы:

147

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

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

или

NSString *strValue = @(myInt).stringValue;
VisioN
источник
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);
Islam 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 годами)
Ислам В.
145
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
Silfverstrom
источник
@Elist, если вы знаете примитивный тип, мне интересно, может ли быть немного меньше накладных расходов, если избежать промежуточного NSNumber из вашего кода? @(myInt)это упакованное выражение , оно возвращает NSNumber.
Cœur
38
int i = 25;
NSString *myString = [NSString stringWithFormat:@"%d",i];

Это один из многих способов.

h4xxr
источник
2

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

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

В США, например, это создаст строку 10,000, но в Германии это будет 10.000.

Роб
источник