He encontrado un método para convertir la cadena a NSNumber, pero el código es en objective-C. he tratado de convertir a swift, pero no es trabajo.

El código que estoy utilizando

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterDecimalStyle;
NSNumber *myNumber = [f numberFromString:@"42222222222"];

y en swift lo estoy usando en este camino

var i = NSNumberFormatter.numberFromString("42")

Pero este código no funciona, ¿qué estoy haciendo mal?

Gracias de antemano

  • pruebe este NSNumberFormatter().numberFromString(«42»)!.doubleValue
InformationsquelleAutor user2413621 | 2015-02-19

7 Comentarios

  1. 146

    Swift 3.0

    NSNumber(integer:myInteger) ha cambiado a NSNumber(value:myInteger)

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

    Swift 2.0

    Utilizar el Int() initialiser como este.

    let someString = "42222222222"
    if let myInteger = Int(someString) {
        let myNumber = NSNumber(integer:myInteger)
        print(myNumber)
    } else {
        print("'\(someString)' did not convert to an Int")
    }

    Esto se puede hacer en una sola línea, si usted ya conoce la cadena de convertir a la perfección o que simplemente no les interesa.

    let myNumber = Int("42222222222")!

    Swift 1.0

    Utilizar el toInt() método.

    let someString = "42222222222"
    if let myInteger = someString.toInt() {
        let myNumber = NSNumber(integer:myInteger)
        println(myNumber)
    } else {
        println("'\(someString)' did not convert to an Int")
    }
    • mi número es mucho, mucho no interger y sustitución de interger a longlong muestra un error?
    • estás diciendo que la cadena no está en este formato: «42» ?
    • Tal vez usted podría actualizar su pregunta con una cadena en el formato que usted desea?
    • Intercambio 2.0 y 1.0 respuestas, colocando 2.0 en la parte superior.
    • siéntase libre de editar mi respuesta si usted siente que podría estructurarse mejor.
    • Si yo hago lo que probablemente será disminuido como «no mejora» (-:
    • Usted ha tirado mi pierna, tengo la actualización de la respuesta.
    • Usted debe ser muy cuidadoso con el uso de Int y Int64 – si el número puede ser mayor que Int32 y su aplicación se puede ejecutar en el iPhone 5 o más, use Int64 y no Int
    • No podía bang a nuestros asnos cualquier otra forma, por lo que hizo swift… nos pone en una posición para hacer este tipo de preguntas sencillas.
    • Tenga en cuenta, la cadena puede contener el doble de valor, no int. En este caso se debe utilizar si se deja en myInteger = Doble(someString)

  2. 12

    O lo hacen sólo en una línea:

    NSNumberFormatter().numberFromString("55")!.decimalValue
    • Como David Berry comentan a continuación, ser cuidadoso con la creación de NSNumberFormatters como este ya que son caros para crear. Mejor almacenamiento en caché o el uso de un singleton si se utiliza el mismo formateador más de una vez.
  3. 7

    Swift 2

    Intente esto:

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

    Swift 3.x

     NSNumber.init( value: Int32("22")!)
    • con Swift 3.x ahora.. NSNumber.init( value: Int32("22")!)
    • no hay necesidad de inicializar con ‘.init». simplemente escriba: NSNumber(valor: Int32(«22»)!)
  4. 5

    Puede utilizar el siguiente código si debe utilizar NSNumberFormatter.
    Es más fácil usar Wezly del método.

    let formatter = NSNumberFormatter()
    formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle;
    if let number = formatter.numberFromString("42") {
        println(number)
    }
    • Tenga en cuenta también que NSNumberFormatter es costoso crear, y debe ser almacenado en caché siempre que sea posible, en lugar de ser creado cada vez que se usa.
  5. 1

    Puedo hacer uso de la extensión en swift 3/4 y es genial.

    extension String {
        var numberValue: NSNumber? {
            if let value = Int(self) {
                return NSNumber(value: value)
            }
            return nil
        }
    }

    y luego sólo tienes que utilizar el siguiente código:

    stringVariable.numberValue

    Lo que es interesante es que no se necesita de una cadena de if declaraciones desenvuelva el valor opcional.
    Por ejemplo,

    if let _ = stringVariable, let intValue = Int(stringVariable!) {
        doSomething(NSNumber.init(value: intValue))
    }

    puede ser sustituido por:

    doSomething(stringVariable?.numberValue)

Dejar respuesta

Please enter your comment!
Please enter your name here