Преобразование строки в Int с помощью Swift

Приложение в основном вычисляет ускорение путем ввода начальной и конечной скорости и времени, а затем использует формулу для расчета ускорения. Однако, поскольку значения в текстовых полях являются строками, я не могу преобразовать их в целые числа.

@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 

Основная идея, обратите внимание, что это работает только в Swift 1.x ( см. Ответ ParaSara, чтобы посмотреть, как он работает в 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" } 

Обновление для Swift 4

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

Обновить ответ для swift 2.0 :

toInt() задается ошибка. Поскольку в Swift 2.x .toInt() была удалена из String. Взамен Int теперь имеет инициализатор, который принимает строку String:

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

myString.toInt() – преобразовать значение строки в int.

Swift 3.x

Если у вас есть целое число, скрывающееся внутри строки, вы можете преобразовать его с помощью конструктора integer, например:

 let myInt = Int(textField.text) 

Как и в случае с другими типами данных (Float и Double), вы также можете конвертировать с помощью NSString:

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

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

Требуемые расширения, структуры и инициализаторы:

 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 } } 

Вы хотите использовать NSNumberFormatter().numberFromString(yourNumberString) . Это здорово, потому что он возвращает необязательный вариант, который затем можно проверить с помощью «если да», чтобы определить, было ли преобразование успешным. например.

  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 } 

// Xcode 8.1 и swift 3.0

Мы также можем обрабатывать его с помощью необязательного связывания, просто

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

быстрый 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 } 

вы также можете использовать опциональную привязку, кроме принудительной привязки.

например:

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

Swift 3

Самый простой и безопасный способ:

 @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" } } 

Избегайте недопустимых значений, задающих тип клавиатуры для цифровой клавиатуры:

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

В Swift 4:

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

Я сделал простую программу, в которой у вас есть 2 поля txt, которые вы вводите в форму пользователя и добавляете их, чтобы упростить понимание, пожалуйста, найдите код ниже.

 @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)" } 

надеюсь это поможет.

О int () и Swift 2.x: если вы получите значение nil после проверки конверсии, если вы попытаетесь преобразовать строку с большим числом (например: 1073741824), в этом случае попробуйте:

 let bytesInternet : Int64 = Int64(bytesInternetString)! 

Swift 3.0

Попробуйте это, вам не нужно проверять какое-либо условие, которое я сделал, просто использую эту функцию. Отправить что-нибудь строку, число, float, double и т. Д. вы получаете число как значение или 0, если оно неспособно преобразовать ваше значение

Функция:

 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 } 

Использование: добавьте вышеприведенную функцию в код и для преобразования используйте let myNumber = getNumber(number: myString) если myString имеет число или строку, она возвращает число, которое оно возвращает 0

Пример 1:

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

Выход: printing number 9834

Пример 2:

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

Выход: printing number 9834

Пример 3:

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

Выход: printing number 9834

Последний swift3 этот код – просто преобразовать строку в int

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

Использовать это:

 // 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" } 

ИЛИ

Сделайте свой UITextField KeyboardType как DecimalTab из вашего XIB или раскадровки, и удалите любое условие if для любого вычисления, т.е.

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

Поскольку тип клавиатуры – DecimalPad, нет возможности ввести другие 0-9 или.

Надеюсь, эта помощь!

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

Это работает для меня

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

Поскольку строка может содержать нечисловые символы, вы должны использовать guard для защиты операции. Пример:

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

В Swift 2.x функция .toInt () была удалена из String. Взамен Int теперь имеет инициализатор, который принимает строку

Int (туЗЬптд)

В вашем случае вы можете использовать Int (textField.text!) Insted 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) 

для альтернативного решения. Вы можете использовать расширение родного типа. Вы можете протестировать с детской площадкой.

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

“2” .add (1)

Мое решение состоит в том, чтобы иметь общее расширение для преобразования строки в 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 } } } 

для Swift3.x

 extension String { func toInt(defaultValue: Int) -> Int { if let n = Int(self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) { return n } else { return defaultValue } } } 
 @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 } 

С быстрым 3 , я должен заставить мой #% @! string & int с “!” иначе это просто не сработает.

Например:

 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 

Вопрос: строка «4.0000» не может быть преобразована в целое число с использованием Int («4.000»)?

Ответ: строка проверки Int () является целым числом или нет, если да, то дайте целое число и в противном случае значение nil. но Float или Double могут преобразовывать любую строку чисел в соответствующий Float или Double без указания нулевого значения. Пример, если у вас есть целая строка «45», но с использованием Float («45») дает вам значение с плавающей запятой 45,0 или с помощью Double («4567») дает вам 45,0.

Решение: NSString (строка: «45.000»). IntegerValue или Int (Float («45.000»)!)! чтобы получить правильный результат.

Я недавно получил ту же проблему. Ниже приведена работа для меня:

  let strValue = "123" let result = (strValue as NSString).integerValue 
  • Перемещение курсора в начало UITextField
  • Отключить клавиатуру UITextField?
  • iOS - Отключение клавиатуры при касании вне UITextField
  • self.delegate = self; что в этом плохого?
  • Как добавить панель инструментов над клавиатурой?
  • iPhone - Клавиатура скрывает TextField
  • Установить дополнение для UITextField с помощью UITextBorderStyleNone
  • Убедитесь, что вход в UITextField только числовой
  • Давайте будем гением компьютера.