J'ai trouvé une méthode pour convertir une chaîne en NSNumber, mais le code est dans objective-C. J'ai essayé de le convertir en Swift mais cela ne fonctionne pas.
Le code que j'utilise
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterDecimalStyle;
NSNumber *myNumber = [f numberFromString:@"42222222222"];
et dans Swift je l'utilise de cette façon
var i = NSNumberFormatter.numberFromString("42")
Mais ce code ne fonctionne pas, qu'est-ce que je fais mal?
Merci d'avance
NSNumber(integer:myInteger)
a été remplacé par NSNumber(value:myInteger)
let someString = "42222222222"
if let myInteger = Int(someString) {
let myNumber = NSNumber(value:myInteger)
}
Utilisez l'initialisateur Int()
comme ceci.
let someString = "42222222222"
if let myInteger = Int(someString) {
let myNumber = NSNumber(integer:myInteger)
print(myNumber)
} else {
print("'\(someString)' did not convert to an Int")
}
Cela peut être fait en une seule ligne si vous savez déjà que la chaîne convertira parfaitement ou si vous vous en fichez.
let myNumber = Int("42222222222")!
Utilisez la méthode toInt()
.
let someString = "42222222222"
if let myInteger = someString.toInt() {
let myNumber = NSNumber(integer:myInteger)
println(myNumber)
} else {
println("'\(someString)' did not convert to an Int")
}
Ou faites-le en une seule ligne:
NSNumberFormatter().numberFromString("55")!.decimalValue
Swift 2
Essaye ça:
var num = NSNumber.init(int: Int32("22")!)
Swift 3.x
NSNumber.init( value: Int32("22")!)
Vous pouvez utiliser le code suivant si vous devez utiliser NSNumberFormatter
. C'est plus simple d'utiliser la méthode de Wezly.
let formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle;
if let number = formatter.numberFromString("42") {
println(number)
}
J'utilise l'extension dans Swift 3/4 et c'est cool.
extension String {
var numberValue: NSNumber? {
if let value = Int(self) {
return NSNumber(value: value)
}
return nil
}
}
puis utilisez simplement le code suivant:
stringVariable.numberValue
Ce qui est bien, c’est que vous n’avez pas besoin d’une chaîne d’instructions if
pour décompresser les valeurs optionnelles. Par exemple,
if let _ = stringVariable, let intValue = Int(stringVariable!) {
doSomething(NSNumber.init(value: intValue))
}
peut être remplacé par:
doSomething(stringVariable?.numberValue)
Dans le dernier Swift:
let number = NumberFormatter().number(from: "1234")