Я хотел бы преобразовать int
к NSString
в Objective C.
Как я могу это сделать?
Ответы:
Примитивы можно преобразовать в объекты с помощью @()
выражения. Таким образом, кратчайший путь , чтобы преобразовать 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];
@(myInt)
это упакованное выражение , оно возвращает NSNumber.
Если эта строка предназначена для представления конечному пользователю, вы должны использовать 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;