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