web-dev-qa-db-fra.com

Chaîne NSNumber dans swift

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

59
user2413621

Swift 3.0

NSNumber(integer:myInteger) a été remplacé par NSNumber(value:myInteger)

let someString = "42222222222"
if let myInteger = Int(someString) {
    let myNumber = NSNumber(value:myInteger)
}

Swift 2.0

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")!

Swift 1.0

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")
}
146
Wez

Ou faites-le en une seule ligne:

NSNumberFormatter().numberFromString("55")!.decimalValue
12
polarwar

Swift 2

Essaye ça:

var num = NSNumber.init(int: Int32("22")!)

Swift 3.x

 NSNumber.init( value: Int32("22")!)
7
Vikram Biwal

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)
}
5
rakeshbs

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)
1
Pei

Dans le dernier Swift:

let number = NumberFormatter().number(from: "1234")
0
Hemang