【发布时间】:2010-11-25 06:07:34
【问题描述】:
我想在 Objective C 中将 int 转换为 NSString。
我该怎么做?
【问题讨论】:
标签: objective-c
我想在 Objective C 中将 int 转换为 NSString。
我该怎么做?
【问题讨论】:
标签: objective-c
可以使用@() 表达式将基元转换为对象。所以最短的方法是将int转换为NSNumber并使用stringValue方法获取字符串表示:
NSString *strValue = [@(myInt) 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) 是 boxed expression 的 [NSNumber numberWithInt:],当给定一个 int 时,它总是返回一个 NSNumber。 [NSNumber stringValue] 将始终返回一个 NSString。在您的评论代码中,使用(id) 强制转换并分配给不同的类型是一个明显的编程错误:您永远不应该这样做。这就像调配一个方法,然后就该方法不做它最初做的事情争论不休。
!) 的情况下将您的评论转换为 Swift,您会发现您在 Objective-C 中做错了。如果对象test 不是您创建的,那么这不是您的责任。您可能会尝试为所有收到的参数调用isKindOfClass:,但即使这样也可能被愚弄(例如,通过传递结构而不是 NSObject)。所以不要这样做:只需明确记录预期的类型即可。
(id) 是一个错误,这只是为了演示IMO description 优于stringValue 的观点(我可能错了,避风港) t 在 ObjC 中编程多年)
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
【讨论】:
@(myInt) 是 boxed expression,它返回一个 NSNumber。
int i = 25;
NSString *myString = [NSString stringWithFormat:@"%d",i];
这是众多方法之一。
【讨论】:
如果此字符串用于向最终用户展示,您应该使用NSNumberFormatter。这将添加数千个分隔符,并尊重用户的本地化设置:
NSInteger n = 10000;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:@(n)];
例如,在美国,这将创建一个字符串 10,000,但在德国,这将是 10.000。
【讨论】: