如何将int转换为NSString?


101

我想一个转换intNSString在目标C.

我怎样才能做到这一点?

Answers:


147

可以使用@()表达式将基元转换为对象。因此,最短的方法是使用方法转换intNSNumber字符串表示形式stringValue

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

要么

NSString *strValue = @(myInt).stringValue;

12
稍微不那么冗长:NSString *strValue = @(myInt).stringValue;
Distortum

@DielsonSales有些对象没有stringValue,但是全部都有description-因此,作为一种好习惯,最好习惯于使用descriptionNSNumber的确,这里不必担心)。尝试以下操作(description将打印日期,但stringValue会崩溃):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
Islam Q.

1
@伊斯兰堡 @(myInt)是用于的盒装表达式[NSNumber numberWithInt:]并且在给定int时将始终返回NSNumber。[NSNumber stringValue]将始终返回NSString。在您的注释代码中,强制转换(id)并分配给其他类型是一个明显的编程错误:您永远不要这样做。这就像是在混淆某个方法,然后对该方法进行争论而不是执行其原来的工作一样。
心教堂

1
@伊斯兰堡 尝试在不使用崩溃运算符(!)的情况下将注释转换为Swift ,您会发现在Objective-C中做错了。如果对象test不是您创建的,则不是您的责任。您可以尝试调用isKindOfClass:所有接收到的参数,但是即使这样也可以被欺骗(通过传递结构而不是NSObject)。因此,请勿这样做:仅明确记录所需的类型。
心教堂

@Cœur,当然,将对象强制转换为(id)是一个错误,这只是演示了IMO description优先于IMO的观点stringValue(我可能是错的,多年来没有在ObjC中编程)
Islam Q.

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

@Elist当您知道原始类型时,我想知道是否可以通过避免代码中出现中间的NSNumber来减少开销?@(myInt)是一个框式表达式,它返回一个NSNumber。
心教堂

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.