我应该如何将int传递给stringWithFormat?


68

我尝试使用stringWithFormat在标签的text属性上设置一个数值,但是以下代码不起作用。我无法将int强制转换为NSString。我期望该方法将知道如何自动将int转换为NSString。

我在这里需要做什么?

- (IBAction) increment: (id) sender
{
    int count = 1;
    label.text = [NSString stringWithFormat:@"%@", count];
}

Answers:


128

做这个:

label.text = [NSString stringWithFormat:@"%d", count];

8
对于int实际上是的64位设备进行编译时,这会产生警告long
devios1 2015年

48

请记住,@“%d”仅适用于32位。如果您曾经针对64位平台进行编译,则一旦开始使用NSInteger以获得兼容性,就应该使用@“%ld”作为格式说明符。


1
使用%ld编译为一个32位的设备现在时产生警告。哪种方法更安全?使用%ld32位还是%d64位?
devios1 2015年

1
没关系,我看到squelart关于先铸造的说明long。这样就可以了,现在可以在没有警告的情况下针对任何一个目标进行编译!
devios1 2015年

41

马克夏邦诺写道:

请记住,@“%d”仅适用于32位。如果您曾经针对64位平台进行编译,则一旦开始使用NSInteger以获得兼容性,就应该使用@“%ld”作为格式说明符。

有趣,感谢您的提示,我在我的NSIntegers上使用@“%d” !

SDK文档还建议在这种情况下强制NSInteger转换long为(以匹配@“%ld”),例如:

NSInteger i = 42;
label.text = [NSString stringWithFormat:@"%ld", (long)i];

资料来源:可可字符串编程指南-字符串格式说明符(需要iPhone开发人员注册)


24

您要使用%d%i表示整数。%@用于对象。

但是,值得注意的是,以下代码将完成相同的任务,并且更加清晰。

label.intValue = count;

13

对于喜剧的价值:

label.text = [NSString stringWithFormat:@"%@", [NSNumber numberWithInt:count]];

(尽管如果有一天您要处理NSNumber的话可能会很有用)


3
或使用现代的Objective-C语法并使用:[NSString stringWithFormat:@“%@”,@(count)]
Daniel Witurna 2014年


1

您发布的代码段是否只是一个示例,以显示您要执行的操作?

我问的原因是您已经命名了一个方法increment,但是您似乎正在使用它来设置文本标签的值,而不是增加值。

如果您尝试做一些更复杂的事情-例如设置整数值并使标签显示该值,则可以考虑使用绑定。例如

您声明一个属性,count然后您的increment操作将此值设置为任意值,然后在IB中,将标签的文本绑定到的值count。只要您对键值编码(KVC)遵循count,就不必编写任何代码来更新标签的显示。从设计的角度来看,您的耦合更为松散。


1

不要忘记long long int

long long int id = [obj.id longLongValue];
[NSString stringWithFormat:@"this is my id: %lld", id]

1
NSString * formattedname;
NSString * firstname;
NSString * middlename;
NSString * lastname;

firstname = @"My First Name";
middlename = @"My Middle Name";
lastname = @"My Last Name";

formattedname = [NSString stringWithFormat:@"My Full Name: %@ %@ %@", firstname, middlename, lastname];
NSLog(@"\n\nHere is the Formatted Name:\n%@\n\n", formattedname);

/*
Result:
Here is the Formatted Name:
My Full Name: My First Name My Middle Name My Last Name
*/

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.