Converting String to Int with Swift
该应用程序基本上通过输入初始和最终速度和时间来计算加速度,然后使用公式来计算加速度。 但是,由于文本框中的值是字符串,我无法将它们转换为整数。
1 2 3 4 5 6 7 8 9 10 11 12 | @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 2.0的答案:
1 2 | let a:Int? = Int(firstText.text) // firstText is UITextField let b:Int? = Int(secondText.text) // secondText is UITextField |
基本的想法,请注意,这仅适用于Swift 1.x(查看ParaSara的答案,了解它在Swift 2.x中是如何工作的):
1 2 3 4 5 6 7 8 9 10 11 | // 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的更新
1 2 3 4 | ... let a:Int? = Int(firstText.text) // firstText is UITextField let b:Int? = Int(secondText.text) // secondText is UITextField ... |
Swift 3.x
如果你有一个隐藏在字符串中的整数,你可以使用整数的构造函数进行转换,如下所示:
1 | let myInt = Int(textField.text) |
与其他数据类型(Float和Double)一样,您也可以使用NSString进行转换:
1 2 | let myString ="556" let myInt = (myString as NSString).integerValue |
Xcode 8.3.2? Swift 3.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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) } } |
必需的扩展,结构和初始化器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 } } |
你想用
例如。
1 2 3 4 5 6 7 | 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 } |
swift 4.0
1 2 3 4 5 6 7 8 9 | let stringNumber ="123" let number = Int(stringNumber) //here number is of type"Int?" //using Forced Unwrapping if number != nil { //string is converted to Int } |
除了强制绑定之外,您还可以使用Optional Binding。
例如:
1 2 3 | if let number = Int(stringNumber) { // number is of type Int } |
// Xcode 8.1和swift 3.0
我们也可以通过Optional Binding来处理它
1 2 3 4 5 6 | let occur ="10" if let occ = Int(occur) { print("By optional binding :", occ*2) // 20 } |
在Swift 4.2和Xcode 10.1中
1 2 3 4 5 6 7 8 9 | 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) |
斯威夫特3
最简单,最安全的方法是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @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" } } |
避免将键盘类型设置为数字键盘的无效值:
1 2 | textFieldA.keyboardType = .numberPad textFieldB.keyboardType = .numberPad |
在Swift 4中:
1 2 3 4 5 6 7 8 | extension String { var numberValue:NSNumber? { let formatter = NumberFormatter() formatter.numberStyle = .decimal return formatter.number(from: self) } } let someFloat ="12".numberValue |
我做了一个简单的程序,你有2个txt字段你从用户输入并添加它们以使其更容易理解请找到下面的代码。
1 2 3 4 5 6 7 8 9 10 | @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)" } |
希望这可以帮助。
最新的swift3这段代码只是将字符串转换为int
1 2 | let myString ="556" let myInt = Int(myString) |
关于int()和Swift 2.x:如果你在转换检查后得到一个nil值,如果你试图转换一个大数字的字符串(例如:1073741824),在这种情况下尝试:
1 | let bytesInternet : Int64 = Int64(bytesInternetString)! |
Swift 3.0
试试这个,你不需要检查我做过的所有条件只是使用这个功能。发送任何字符串,数字,浮点数,双精度等。你得到一个数字作为值,如果它无法转换你的值,则为0
功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 } |
用法:
在代码中添加上述函数并转换使用
如果
例1:
1 2 | let number:String ="9834" print("printing number \(getNumber(number: number))") |
输出:
例2:
1 2 | let number:Double = 9834 print("printing number \(getNumber(number: number))") |
输出:
例3:
1 2 | let number = 9834 print("printing number \(getNumber(number: number))") |
输出:
对于String到Int和其他类型很有用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | extension String { //Converts String to Int public func toInt() -> Int? { if let num = NumberFormatter().number(from: self) { return num.intValue } else { return nil } } //Converts String to Double public func toDouble() -> Double? { if let num = NumberFormatter().number(from: self) { return num.doubleValue } else { return nil } } /// EZSE: Converts String to Float public func toFloat() -> Float? { if let num = NumberFormatter().number(from: self) { return num.floatValue } else { return nil } } //Converts String to Bool public func toBool() -> Bool? { return (self as NSString).boolValue } } |
使用它像:
1 | "123".toInt() // 123 |
由于字符串可能包含非数字字符,因此应使用
1 2 3 4 5 | guard let labelInt:Int = Int(labelString) else { return } useLabelInt() |
在Swift 2.x中,.toInt()函数已从String中删除。在替换中,Int现在有一个接受String的初始化器
INT(MyString的)
在您的情况下,您可以使用textField.text!.toInt()的Int(textField.text!)
Swift 1.x
1 2 | let myString: String ="256" let myInt: Int? = myString.toInt() |
Swift 2.x,3.x
1 2 | let myString: String ="256" let myInt: Int? = Int(myString) |
用这个:
1 2 3 4 5 6 7 8 9 10 11 | // 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" } |
要么
从您的XIB或故事板中将您的UITextField KeyboardType设置为DecimalTab,并删除任何if条件以进行任何计算,即。
1 2 | var ans = a + b answerLabel.text ="Answer is \(ans)" |
因为键盘类型是DecimalPad,所以没有机会输入其他0-9或。
希望这有帮助!!
这适合我
1 | var a:Int? = Int(userInput.text!) |
1 2 3 4 5 6 7 8 | // 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); |
对于Swift3.x
1 2 3 4 5 6 7 8 9 | extension String { func toInt(defaultValue: Int) -> Int { if let n = Int(self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) { return n } else { return defaultValue } } } |
我最近遇到了同样的问题。以下解决方案对我有用:
1 2 | let strValue ="123" let result = (strValue as NSString).integerValue |
替代解决方案。您可以使用本机类型的扩展名。你可以在游乐场测试。
1 2 3 4 5 6 7 8 9 10 | extension String { func add(a: Int) -> Int? { if let b = Int(self) { return b + a } else { return nil } } } |
"2"。新增(1)
Swift 5.0及以上版本
工作
如果您要拆分
实际代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | //Convert Any To Number Object Removing Optional Key Word. public func getNumber(number: Any) -> NSNumber{ guard let statusNumber:NSNumber = number as? NSNumber else { guard let statString:String = number as? String else { guard let statSubStr : Substring = number as? Substring else { return 0 } if let myInteger = Int(statSubStr) { return NSNumber(value:myInteger) } else{ return 0 } } if let myInteger = Int(statString) { return NSNumber(value:myInteger) } else if let myFloat = Float(statString) { return NSNumber(value:myFloat) }else { return 0 } } return statusNumber } |
用法
1 2 3 | if let hourVal = getNumber(number: hourStr) as? Int { } |
传递
1 | Double(getNumber(number: dict["OUT"] ?? 0) |
问题:字符串"4.0000"无法使用Int("4.000")转换为整数?
答案:Int()检查字符串是否为整数,如果是,则给出整数,否则为nil。但是Float或Double可以将任何数字字符串转换为相应的Float或Double而不给出nil。例如,如果你有"45"整数字符串但使用Float("45")给你45.0浮点值或使用Double("4567")给你45.0。
解决方案:NSString(字符串:"45.000")。integerValue或Int(Float("45.000")!)!得到正确的结果。
我的解决方案是对字符串到int转换进行一般扩展。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 } } } |
Swift中的Int包含一个接受String的初始化器。它返回一个可选的Int?因为如果字符串不包含数字,转换可能会失败。
通过使用if let语句,您可以验证转换是否成功。
所以你的代码变成这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @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 if let intAnswer = Int(txtBox1.text) { // Correctly converted } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @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 with"!"否则它只是不起作用。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
在Swift 4中将String值转换为Integer
1 2 3 4 5 | let strValue:String ="100" let intValue = strValue as! Int var intValueFromString:Int = strValue as! Int or var intValueFromString = Int(strValue)! |