Is it possible to cast an NSInteger to NSNumber?

41,292

Solution 1

You cannot cast it because NSInteger is not an object, just an alias for a built-in type. You can always create a new NSNumber object from NSInteger, like this:

NSNumber *myNum = @(myNsIntValue);

or in the prior version of the compiler, use

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue];

Solution 2

since Apple LLVM Compiler 4.0, there is an easier way to create NSNumber object:

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

Solution 3

This is the more correct answer and it will not produce unexpected error.

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue];

Because the doc said:

"numberWithInteger: Creates and returns an NSNumber object containing a given value, treating it as an NSInteger."

"numberWithInt: Creates and returns an NSNumber object containing a given value, treating it as a signed int."

Share:
41,292
Fitzy
Author by

Fitzy

Donate: Bitcoin: 18YFRUwQne2cPivXSGWL7AffoCK2qR71Bi Ethereum: 0xAD66D5F9BC59924152361ce4B58aA8fa63A9a9Ae

Updated on July 09, 2022

Comments

  • Fitzy
    Fitzy almost 2 years

    Is it possible to cast a NSInteger to a NSNumber object?

    I need to convert the tag of a UIImageView object to a NSNumber object because I need to pass it as an argument to a function.

    • gnasher729
      gnasher729 about 10 years
      It's absolutely possible to cast an NSInteger to an NSNumber*. The result will most likely lead to a crash. Of course if you have a number x, you can use @(x) to create an NSNumber object with the value x. Which will work, but is not a cast.