String to NSNumber in Swift
IosSwiftIos8NsnumberIos Problem Overview
I found a method to convert String to NSNumber, but the code is in Objective-C. I have tried converting it to Swift but it is not working.
The code I am using:
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterDecimalStyle;
NSNumber *myNumber = [f numberFromString:@"42222222222"];
and in Swift I am using it in this way:
var i = NSNumberFormatter.numberFromString("42")
But this code is not working. What am I doing wrong?
Ios Solutions
Solution 1 - Ios
Swift 3.0
NSNumber(integer:myInteger)
has changed to NSNumber(value:myInteger)
let someString = "42222222222"
if let myInteger = Int(someString) {
let myNumber = NSNumber(value:myInteger)
}
Swift 2.0
Use the Int()
initialiser like this.
let someString = "42222222222"
if let myInteger = Int(someString) {
let myNumber = NSNumber(integer:myInteger)
print(myNumber)
} else {
print("'\(someString)' did not convert to an Int")
}
This can be done in one line if you already know the string will convert perfectly or you just don't care.
let myNumber = Int("42222222222")!
Swift 1.0
Use the toInt()
method.
let someString = "42222222222"
if let myInteger = someString.toInt() {
let myNumber = NSNumber(integer:myInteger)
println(myNumber)
} else {
println("'\(someString)' did not convert to an Int")
}
Solution 2 - Ios
Or do it just in one line:
NSNumberFormatter().numberFromString("55")!.decimalValue
Solution 3 - Ios
Swift 2
Try this:
var num = NSNumber(int: Int32("22")!)
Swift 3.x
NSNumber(value: Int32("22")!)
Solution 4 - Ios
In latest Swift:
let number = NumberFormatter().number(from: "1234")
Solution 5 - Ios
You can use the following code if you must use NSNumberFormatter
.
It's simpler to use Wezly's method.
let formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle;
if let number = formatter.numberFromString("42") {
println(number)
}
Solution 6 - Ios
I do use extension in swift 3/4 and it's cool.
extension String {
var numberValue: NSNumber? {
if let value = Int(self) {
return NSNumber(value: value)
}
return nil
}
}
and then just use following code:
stringVariable.numberValue
What is cool is that you don't need a chain of if
statements to unwrap the optional values.
For instance,
if let _ = stringVariable, let intValue = Int(stringVariable!) {
doSomething(NSNumber.init(value: intValue))
}
can be replaced by:
doSomething(stringVariable?.numberValue)
Solution 7 - Ios
Swift 5
let myInt = NumberFormatter().number(from: "42")
Solution 8 - Ios
("23" as NSString).integerValue ("23.5" as NSString).doubleValue
and so on .
Solution 9 - Ios
> Try Once
let myString = "123"
let myInt = NSNumber(value: Int(myString) ?? 0)