使用Swift将String转换为Int

Mar*_*sem 341 int uitextfield ios 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
Run Code Online (Sandbox Code Playgroud)

Par*_*mal 335

更新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
Run Code Online (Sandbox Code Playgroud)


Nar*_*ini 315

基本的想法,请注意,这仅适用于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"
    }
Run Code Online (Sandbox Code Playgroud)

Swift 4的更新

...
let a:Int? = Int(firstText.text) // firstText is UITextField
let b:Int? = Int(secondText.text) // secondText is UITextField
...
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案只适用于Swift而不适用于Swift2.现在你应该使用:Int(firstText.text) (7认同)
  • 如果你需要浮点数(你真的想要Double,而不是浮点数),toInt()就不会这样做.你能用你的想象力和可用的文档找到合适的功能吗? (4认同)
  • 我得到''NSString'没有名为'toInt'的成员.有任何想法吗? (4认同)

Kum*_* KL 83

myString.toInt() - 将字符串值转换为int.

Swift 3.x

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

let myInt = Int(textField.text)
Run Code Online (Sandbox Code Playgroud)

与其他数据类型(Float和Double)一样,您也可以使用NSString进行转换:

let myString = "556"
let myInt = (myString as NSString).integerValue
Run Code Online (Sandbox Code Playgroud)


Leo*_*bus 31

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

必需的扩展,结构和初始化器:

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
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 23

你想用NSNumberFormatter().numberFromString(yourNumberString).它很棒,因为它返回一个可选项,然后您可以使用"if let"进行测试,以确定转换是否成功.例如.

     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
     }
Run Code Online (Sandbox Code Playgroud)


小智 21

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
}
Run Code Online (Sandbox Code Playgroud)

除了强制绑定之外,您还可以使用Optional Binding.

例如:

  if let number = Int(stringNumber) { 
   // number is of type Int 
  }
Run Code Online (Sandbox Code Playgroud)


小智 14

// Xcode 8.1和swift 3.0

我们也可以通过Optional Binding来处理它

let occur = "10"

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

    }
Run Code Online (Sandbox Code Playgroud)


iOS*_*iOS 10

Swift 4.2Xcode 10.1中

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)
Run Code Online (Sandbox Code Playgroud)


小智 7

斯威夫特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"
      }        
}
Run Code Online (Sandbox Code Playgroud)

避免将键盘类型设置为数字键盘的无效值:

 textFieldA.keyboardType = .numberPad
 textFieldB.keyboardType = .numberPad
Run Code Online (Sandbox Code Playgroud)


小智 7

对于 String 到 Int 和其他类型很有用

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
        }
    }
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

"123".toInt() // 123
Run Code Online (Sandbox Code Playgroud)


Ank*_*arg 6

在Swift 4中:

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