Swift – 将string转换为Int

所以我的应用程序是非常基本的,但我是新的,Xcode平台的新。 应用程序主要通过input初始和最终速度和时间来计算加速度,然后使用公式来计算加速度。 但是,由于文本框中的值是string,我无法将它们转换为整数。

@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 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() – 将string值转换为int。

Swift 3.x

如果你有一个隐藏在一个string中的整数,你可以使用整数的构造函数进行转换,如下所示:

 let myInt = Int(textField.text) 

与其他数据types(浮点和双精度)一样,您也可以使用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) 。 这很好,因为它返回一个可选项,然后可以用“if let”来testing转换是否成功。 例如。

  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 } 

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

避免无效值将键盘types设置为数字键盘:

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

我已经做了一个简单的程序,在那里你有2个txt字段,你从用户input并添加它们使其更容易理解,请find下面的代码。

 @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:如果你在转换后得到一个零值,检查你是否试图转换一个大数字的string(例如:1073741824),在这种情况下请尝试:

 let bytesInternet : Int64 = Int64(bytesInternetString)! 

Swift 3.0

试试这个,你不需要检查任何条件,我已经做了所有的事情,只是使用这个function。 发送任何string,数字,浮动,双等。 如果无法转换您的值,您会得到一个数值或0

function:

 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有一个数字或string,则返回数字,否则返回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

用这个:

 // 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或故事板,并删除任何条件做任何计算,即。

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

由于键盘types是DecimalPad,因此没有机会input其他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!) 

最新的swift3这个代码简单地把string转换为int

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

在Swift 4:

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

替代解决scheme。 您可以使用扩展本地types。 你可以在操场上testing。

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

“2”。新增(1)

我的解决scheme是有一个string到整数转换的一般扩展。

 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