如何将int转换为NSString?

107

我想在 Objective C 中将一个 int 转换成 NSString,请问如何实现?

4个回答

158

使用@()表达式可以将基本类型转换为对象。因此,最简单的方法是将 int 转换为NSNumber,然后使用stringValue方法获取其字符串表示形式:

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

12
稍微简洁一点:NSString *strValue = [@(myInt) stringValue]; - Steve
@DielsonSales 一些对象没有 stringValue,但是所有的对象都有 description - 所以作为一个好的习惯,最好习惯于使用 descriptionNSNumber 有,这里不需要担心)。尝试这个(description 将打印日期,但 stringValue 将崩溃):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue); - Islam
1
@IslamQ。@(myInt)是一个boxed expression,用于[NSNumber numberWithInt:],当给定一个int时,它将始终返回一个NSNumber。[NSNumber stringValue]将始终返回一个NSString。在您的评论代码中,强制转换为(id)并分配给不同类型是明显的编程错误:您永远不应该这样做。这就像交换方法,然后对该方法不执行原来的操作提出异议。 - Cœur
1
@IslamQ。如果你尝试在Swift中转换你的注释而不使用崩溃操作符(!),你会发现你在Objective-C中做错了。如果对象“test”不是由您创建的,则不是您的责任。您可以尝试为所有接收到的参数调用isKindOfClass:,但即使通过传递结构而不是NSObject来欺骗它(例如),也可能被愚弄。所以不要这样做:只需明确记录预期的类型。 - Cœur
@Cœur,将一个对象转换为(id)是一个错误,这只是为了演示我认为descriptionstringValue更好(我可能错了,已经多年没有编写ObjC代码了)。 - Islam
@IslamQ。NSNumber *test = (__bridge id)(void*)1; NSLog(@"%@", test.description);仍会崩溃。或者在与您的代码相同的文件中包含@implementation NSDate(foo)-(NSString *)description{exit(0);}@end,并使用[NSDate date]调用description时会崩溃。或者过度释放您的日期,当调用description时可能会不可预测地崩溃(CFDateRef date=CFDateCreate(nil, 0);CFRelease(date);NSNumber*test=CFBridgingRelease(date);NSLog(@"%@",test.description);)。最后,您的description输出可能不会崩溃,但在操作系统更新时更可能不一致。 - Cœur

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

当您知道原始类型时,避免在代码中使用中间NSNumber可能会稍微减少一些开销,这是我想知道的。@(myInt)是一个boxed expression,它返回一个NSNumber。 - Cœur

38
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接