首页 文章

使用Swift将String转换为Int

提问于
浏览
286

该应用程序基本上通过输入初始和最终速度和时间来计算加速度,然后使用公式来计算加速度 . 但是,由于文本框中的值是字符串,我无法将它们转换为整数 .

@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

27 回答

  • 0

    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
    
  • 30

    在Swift 4中:

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

    我已经制作了一个简单的程序,你有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)"
    }
    

    希望这可以帮助 .

  • 0

    关于int()和Swift 2.x:如果你在转换检查后得到一个nil值,如果你试图转换一个大数字的字符串(例如:1073741824),在这种情况下尝试:

    let bytesInternet : Int64 = Int64(bytesInternetString)!
    
  • 3

    Latest swift3 此代码只是将字符串转换为int

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

    我最近遇到了同样的问题 . 以下解决方案对我有用:

    let strValue = "123"
            let result = (strValue as NSString).integerValue
    
  • 0

    在Swift 4中将字符串值转换为Integer

    let strValue:String = "100"
    let intValue = strValue as! Int
    var intValueFromString:Int = strValue as! Int
    or
    var intValueFromString = Int(strValue)!
    
  • 3

    基本想法, note that this only works in Swift 1.x (查看ParaSara's answer以了解它在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
    ...
    
  • 0

    Update Answer for 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
    
  • 75

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

    Swift 3.x

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

    let myInt = Int(textField.text)
    

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

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

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

    你想用 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
         }
    
  • 1

    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
    }
    

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

    例如:

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

    //Xcode 8.1 and swift 3.0

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

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

    Swift 3.0

    试试这个,你不需要检查我做过的所有条件只是使用这个功能 . 发送任何字符串,数字,浮点数,双精度等 . 你得到一个数字作为值,如果它无法转换你的值,则为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
    }
    

    Usage: 在代码中添加上述函数并转换使用 let myNumber = getNumber(number: myString) 如果 myString 有一个数字或字符串,则返回数字,否则返回 0

    Example 1:

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

    输出: printing number 9834

    Example 2:

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

    输出: printing number 9834

    Example 3:

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

    输出: printing number 9834

  • 243

    由于字符串可能包含非数字字符,因此应使用 guard 来保护操作 . 例:

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

    Swift 4.2 和Xcode 10中

    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)
    
  • 0

    用这个:

    // 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条件以进行任何计算,即 .

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

    因为键盘类型是DecimalPad,所以没有机会输入其他0-9或 .

    希望这有帮助!!

  • 2
    //  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);
    
  • 5

    这对我有用

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

    对于Swift3.x

    extension String {
        func toInt(defaultValue: Int) -> Int {
            if let n = Int(self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) {
                return n
            } else {
                return defaultValue
            }
        }
    }
    
  • 22

    在Swift 2.x中,.toInt()函数已从String中删除 . 在替换中,Int现在有一个接受String的初始化器

    INT(MyString的)

    在您的情况下,您可以使用textField.text!.toInt()的Int(textField.text!)

    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)
    
  • 327

    替代解决方案 . 您可以使用本机类型的扩展名 . 你可以在操场上试试 .

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

    “2” . 新增(1)

  • 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  
            }
        }
    
    }
    
  • 4
    @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
    }
    
  • 2

    截至 swift 3 ,我必须强迫我的#%@!字符串&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
    
  • 15

    问题:字符串“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”)!)!得到正确的结果 .

相关问题