简体   繁体   English

如何返回转换为NSInteger的NSNumber

[英]How to return an NSNumber converted to NSInteger

With NSNumber being a class, I am trying to convert it to an NSInteger to do some computations. 由于NSNumber是一个类,我试图将它转换为NSInteger来进行一些计算。 In NSLog, it shows that I am converting and doing the multiplication correct. 在NSLog中,它表明我正在转换并正确进行乘法运算。 However, when I got to return doubler as a regular NSInteger, I get "Implicit conversion of 'NSInteger' (aka 'long') to 'NSNumber* ' is disallowed with ARC". 但是,当我将doubler作为常规NSInteger返回时,我得到“不允许将'NSInteger'(又名'long')隐式转换为'NSNumber *'与ARC”。 Where am I going wrong and what do I do to make this correct? 我哪里出错了,我该怎么做才能做到这一点?

- (NSNumber *) numberThatIsTwiceAsBigAsNumber:(NSNumber *)number {

NSInteger doubler = [number integerValue] * 2;
NSLog(@"%ld", (long)doubler);

return doubler;
}

EDIT: For those curious, this is how I solved it: 编辑:对于那些好奇的人,我就是这样解决的:

NSInteger unboxing = [number integerValue] * 2;
NSNumber *boxing = [NSNumber numberWithInteger:unboxing];

return boxing;

You need to return the number as NSNumber, not NSInteger. 您需要将数字返回为NSNumber,而不是NSInteger。 So, convert the NSInteger to NSNumber before returning. 因此,在返回之前将NSInteger转换为NSNumber。

return @(doubler);

Change your return type to 将您的退货类型更改为

- (NSInteger)

If you intend to continue to use it as such, or explicitly cast it. 如果您打算继续使用它,或者明确地使用它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM