valueof how convertir convert cast ios swift int uitextfield

ios - how - Convertir cadena a Int con Swift



string valueof swift (26)

A partir de Swift 3 , tengo que forzar mi #% @! string & int con un "!" de lo contrario simplemente no funciona.

Por ejemplo:

let prefs = UserDefaults.standard var counter: String! counter = prefs.string(forKey:"counter") print("counter: /(counter!)") var counterInt = Int(counter!) counterInt = counterInt! + 1 print("counterInt: /(counterInt!)") OUTPUT: counter: 1 counterInt: 2

La aplicación básicamente calcula la aceleración ingresando la velocidad y el tiempo iniciales y finales, y luego usa una fórmula para calcular la aceleración. Sin embargo, como los valores en los cuadros de texto son cadenas, no puedo convertirlos a números enteros.

@IBOutlet var txtBox1 : UITextField @IBOutlet var txtBox2 : UITextField @IBOutlet var txtBox3 : UITextField @IBOutlet var lblAnswer : UILabel @IBAction func btn1(sender : AnyObject) { let answer1 = "The acceleration is" var answer2 = txtBox1 var answer3 = txtBox2 var answer4 = txtBox3


Acerca de int () y Swift 2.x: si obtiene un valor nulo después de la verificación, si intenta convertir una cadena con un número grande (por ejemplo: 1073741824), en este caso intente:

let bytesInternet : Int64 = Int64(bytesInternetString)!


Debido a que una cadena puede contener caracteres no numéricos, debe usar una guard para proteger la operación. Ejemplo:

guard let labelInt:Int = Int(labelString) else { return } useLabelInt()


En Swift 4.2 y Xcode 10

let string:String = "789" let intValue:Int = Int(string)! print(intValue) let integerValue:Int = 789 let stringValue:String = String(integerValue) //OR //let stringValue:String = "/(integerValue)" print(stringValue)


En Swift 4:

extension String { var numberValue:NSNumber? { let formatter = NumberFormatter() formatter.numberStyle = .decimal return formatter.number(from: self) } } let someFloat = "12".numberValue


Esto funciona para mi

var a:Int? = Int(userInput.text!)


He creado un programa simple, en el que tiene 2 campos de texto, toma el formulario de entrada del usuario y los agrega para que sea más fácil de entender. Busque el código a continuación.

@IBOutlet weak var result: UILabel! @IBOutlet weak var one: UITextField! @IBOutlet weak var two: UITextField! @IBAction func add(sender: AnyObject) { let count = Int(one.text!) let cal = Int(two.text!) let sum = count! + cal! result.text = "Sum is /(sum)" }

espero que esto ayude.


Idea básica, tenga en cuenta que esto solo funciona en Swift 1.x (verifique la respuesta de ParaSara para ver cómo funciona en Swift 2.x):

// toInt returns optional that''s why we used a:Int? let a:Int? = firstText.text.toInt() // firstText is UITextField let b:Int? = secondText.text.toInt() // secondText is UITextField // check a and b before unwrapping using ! if a && b { var ans = a! + b! answerLabel.text = "Answer is /(ans)" // answerLabel ie UILabel } else { answerLabel.text = "Input values are not numeric" }

Actualización para Swift 4

... let a:Int? = Int(firstText.text) // firstText is UITextField let b:Int? = Int(secondText.text) // secondText is UITextField ...


Mi solución es tener una extensión general para la conversión de cadena a int.

extension String { // default: it is a number suitable for your project if the string is not an integer func toInt(default: Int) -> Int { if let result = Int(self) { return result } else { return default } } }


Para la solución alternativa. Puede utilizar la extensión de un tipo nativo. Se puede probar con zona de juegos.

extension String { func add(a: Int) -> Int? { if let b = Int(self) { return b + a } else { return nil } } }

"2" .add (1)


Pregunta: la cadena "4.0000" no se puede convertir en entero utilizando Int ("4.000")?

Respuesta: Int () la cadena de verificación es un número entero o no si es así y luego le da un número entero y de lo contrario nulo pero Float o Double pueden convertir cualquier cadena de número a respectivo Float o Double sin dar nil. Por ejemplo, si tiene una cadena de enteros "45" pero el uso de Float ("45") le da un valor flotante de 45.0 o el uso de Doble ("4567") le da 45.0.

Solución: NSString (cadena: "45.000"). IntegerValue o Int (Float ("45.000")!)! para obtener el resultado correcto.


Quieres usar NSNumberFormatter().numberFromString(yourNumberString) . Es genial porque devuelve una opción que luego puede probar con un "if let" para determinar si la conversión fue exitosa. p.ej.

var myString = "/(10)" if let myNumber = NSNumberFormatter().numberFromString(myString) { var myInt = myNumber.integerValue // do what you need to do with myInt } else { // what ever error code you need to write }


Recientemente tengo el mismo problema. A continuación la solución es trabajo para mí:

let strValue = "123" let result = (strValue as NSString).integerValue


Utilizar esta:

// get the values from text boxes let a:Double = firstText.text.bridgeToObjectiveC().doubleValue let b:Double = secondText.text.bridgeToObjectiveC().doubleValue // we checking against 0.0, because above function return 0.0 if it gets failed to convert if (a != 0.0) && (b != 0.0) { var ans = a + b answerLabel.text = "Answer is /(ans)" } else { answerLabel.text = "Input values are not numberic" }

O

Haga su UITextField KeyboardType como DecimalTab desde su XIB o guión gráfico, y elimine cualquier condición if para realizar cualquier cálculo, es decir.

var ans = a + b answerLabel.text = "Answer is /(ans)"

Debido a que el tipo de teclado es DecimalPad, no hay posibilidad de ingresar otro 0-9 o.

Espero que esto ayude !!


para Swift3.x

extension String { func toInt(defaultValue: Int) -> Int { if let n = Int(self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) { return n } else { return defaultValue } } }


myString.toInt() : convierte el valor de cadena en int.

Swift 3.x

Si tiene un entero oculto dentro de una cadena, puede convertir utilizando el constructor del entero, como este:

let myInt = Int(textField.text)

Al igual que con otros tipos de datos (flotante y doble), también puede convertir utilizando NSString:

let myString = "556" let myInt = (myString as NSString).integerValue


En Swift 2.x, la función .toInt () se eliminó de String. En reemplazo, Int ahora tiene un inicializador que acepta una cadena

Int (myString)

En su caso, podría usar Int (textField.text!) En lugar de textField.text! .ToInt ()

Swift 1.x

let myString: String = "256" let myInt: Int? = myString.toInt()

Swift 2.x, 3.x

let myString: String = "256" let myInt: Int? = Int(myString)


// Xcode 8.1 y Swift 3.0

También podemos manejarlo por Encuadernación Opcional, Simplemente

let occur = "10" if let occ = Int(occur) { print("By optional binding :", occ*2) // 20 }


El último swift3 este código es simplemente para convertir la cadena a int

let myString = "556" let myInt = Int(myString)


Respuesta de actualización para swift 2.0 :

toInt() método toInt() recibe un error. Porque, en Swift 2.x, la función .toInt() se eliminó de String. En reemplazo, Int ahora tiene un inicializador que acepta una cadena:

let a:Int? = Int(firstText.text) // firstText is UITextField let b:Int? = Int(secondText.text) // secondText is UITextField


Swift 3.0

Intente esto, no necesita verificar ninguna condición. He hecho todo, solo use esta función. Envía cualquier cadena, número, flotador, doble, etc. obtiene un número como valor o 0 si no puede convertir su valor

Función:

func getNumber(number: Any?) -> NSNumber { guard let statusNumber:NSNumber = number as? NSNumber else { guard let statString:String = number as? String else { return 0 } if let myInteger = Int(statString) { return NSNumber(value:myInteger) } else{ return 0 } } return statusNumber }

Uso: Agregue la función anterior en el código y para convertir use let myNumber = getNumber(number: myString) si myString tiene un número o una cadena, devuelve el número; de lo contrario, devuelve 0

Ejemplo 1:

let number:String = "9834" print("printing number /(getNumber(number: number))")

Salida: printing number 9834

Ejemplo 2:

let number:Double = 9834 print("printing number /(getNumber(number: number))")

Salida: printing number 9834

Ejemplo 3:

let number = 9834 print("printing number /(getNumber(number: number))")

Salida: printing number 9834


Swift 3

La forma más sencilla y segura es:

@IBOutlet var textFieldA : UITextField @IBOutlet var textFieldB : UITextField @IBOutlet var answerLabel : UILabel @IBAction func calculate(sender : AnyObject) { if let intValueA = Int(textFieldA), let intValueB = Int(textFieldB) { let result = intValueA + intValueB answerLabel.text = "The acceleration is /(result)" } else { answerLabel.text = "The value /(intValueA) and/or /(intValueB) are not a valid integer value" } }

Evite valores no válidos estableciendo el tipo de teclado en el teclado numérico:

textFieldA.keyboardType = .numberPad textFieldB.keyboardType = .numberPad


Xcode 8.3.2 • Swift 3.1

class IntegerField: UITextField { var integer: Int { return string.digits.integer } override func willMove(toSuperview newSuperview: UIView?) { addTarget(self, action: #selector(editingChanged), for: .editingChanged) keyboardType = .numberPad textAlignment = .right editingChanged() } func editingChanged() { text = Formatter.decimal.string(for: integer) print(integer) } }

Extensiones requeridas, estructuras e inicializadores:

extension Sequence where Iterator.Element == UnicodeScalar { var string: String { return String(String.UnicodeScalarView(self)) } } extension Formatter { static let decimal = NumberFormatter(numberStyle: .decimal) } extension UITextField { var string: String { return text ?? "" } } extension String { private static var digitsPattern = UnicodeScalar("0")..."9" var digits: String { return unicodeScalars.filter { String.digitsPattern ~= $0 }.string } var integer: Int { return Int(self) ?? 0 } } extension NumberFormatter { convenience init(numberStyle: Style) { self.init() self.numberStyle = numberStyle } }


swift 4.0

let stringNumber = "123" let number = Int(stringNumber) //here number is of type "Int?" //using Forced Unwrapping if number != nil { //string is converted to Int }

También puede utilizar el enlace opcional que no sea el enlace forzado.

p.ej:

if let number = Int(stringNumber) { // number is of type Int }


// To convert user input (i.e string) to int for calculation.I did this , and it works. let num:Int? = Int(firstTextField.text!); let sum:Int = num!-2 print(sum);


@IBAction func calculateAclr(_ sender: Any) { if let addition = addition(arrayString: [txtBox1.text, txtBox2.text, txtBox3.text]) { print("Answer = /(addition)") lblAnswer.text = "/(addition)" } } func addition(arrayString: [Any?]) -> Int? { var answer:Int? for arrayElement in arrayString { if let stringValue = arrayElement, let intValue = Int(stringValue) { answer = (answer ?? 0) + intValue } } return answer }