Reputation: 4277
I have a variable called number of type Int
var number = value!.integerValue as Int
Now I have to create a NSNumber object using that value.
I am trying to use this constructor
value = NSNumber(int: number)
, but it does not work.
It expect the primitive type int, not Int I guess.
Anyone know how to get around this?
Thanks!
Upvotes: 7
Views: 19424
Reputation: 23624
You just do value = number
As you can see in the documentation:
the native swift number types generally bridge directly to NSNumber
.
Numbers
Swift automatically bridges certain native number types, such as Int and Float, to NSNumber. This bridging lets you create an NSNumber from one of these types:
SWIFT
let n = 42
let m: NSNumber = n
It also allows you to pass a value of type Int, for example, to an argument expecting an NSNumber. Note that because NSNumber can contain a variety of different types, you cannot pass it to something expecting an Int value.
All of the following types are automatically bridged to NSNumber:
Int
UInt
Float
Double
Bool
Swift 3 update
In Swift 3, this bridging conversion is no longer automatic and you have to cast it explicitly like this:
let n = 42
let m: NSNumber = n as NSNumber
Upvotes: 7
Reputation: 11693
For Swift 3 you must use:
var convertedNumber = NSNumber(value: numberToConvert)
Upvotes: 4
Reputation: 53112
The issue is because in ObjC, an int
is a 32 bit number, and an integer
or NSInteger
is a 64 bit number.
var number = value!.integerValue as Int
Number is of type Int
which corresponds to the ObjC type NSInteger
You now try to create with this:
value = NSNumber(int: number)
Which takes an Int32
or int
type, thus resulting in failure. You have a few options that will work.
One:
value = NSNumber(int: Int32(number))
Two (probably better):
value = NSNumber(integer: number)
Three (probably best):
As @Dima points out, you can just set it directly because swift automatically converts:
value = number
Upvotes: 4