2012-03-14 132 views
36

快速问题 - 是否可以将NSInteger转换为NSNumber对象?我需要将UIImageView对象的标签转换为NSNumber对象,因为我需要将它作为参数传递给函数。是否可以将NSInteger转换为NSNumber?

+0

这是绝对有可能投一个NSInteger到一个NSNumber *。结果很可能导致崩溃。当然,如果你有一个数字x,你可以使用@(x)创建一个值为x的NSNumber对象。哪个会起作用,但不是演员。 – gnasher729 2014-05-11 21:26:39

回答

99

你不能转换它因为NSInteger不是一个对象,只是一个内置类型的别名。你总是可以从NSInteger创建一个新的NSNumber对象,像这样:

NSNumber *myNum = @(myNsIntValue); 

或编译器的早期版本,使用

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 
+1

此答案在新的64位设备上产生警告。请参阅下面的@ Kevin更准确的答案。 – 2014-01-05 17:33:23

+0

@FullDecent编辑,谢谢! – dasblinkenlight 2014-01-05 18:37:02

6

这是比较正确的答案,它不会产生意外错误。

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 

由于DOC表示:

“numberWithInteger: 创建并返回包含一个给定的值一个NSNumber对象,将它视为一个NSInteger”

“numberWithInt: 创建并返回一个包含给定值的NSNumber对象,将其视为一个带符号的int。”

15

因为Apple LLVM Compiler 4.0,有创造NSNumber对象更简单的方法:

NSNumber *x = @1234; 
NSNumber *y = @(anIntegerVariable); 
+1

NSNumber * z = @(aDoubleValue);工作也一样。 – gnasher729 2014-05-11 21:27:24