Ios 使用Swift将字符串转换为Int

Ios 使用Swift将字符串转换为Int,ios,swift,int,uitextfield,Ios,Swift,Int,Uitextfield,该应用程序基本上通过输入初始和最终速度和时间来计算加速度,然后使用公式来计算加速度。但是,由于文本框中的值是字符串,我无法将它们转换为整数 @IBOutlet var txtBox1 : UITextField @IBOutlet var txtBox2 : UITextField @IBOutlet var txtBox3 : UITextField @IBOutlet var lblAnswer : UILabel @IBAction func btn1(sender : AnyObje

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

@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
myString.toInt()
-将字符串值转换为int

Swift 3.x

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

let myInt = Int(textField.text)
与其他数据类型(Float和Double)一样,您也可以使用NSString进行转换:

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

基本思想,请注意,这仅适用于Swift 1.x(请查看它在Swift 2.x中的工作原理):

Swift 4的更新

...
let a:Int? = Int(firstText.text) // firstText is UITextField
let b:Int? = Int(secondText.text) // secondText is UITextField
...
使用以下命令:

// 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键盘类型设置为DecimalTab,并删除进行任何计算的任何if条件,即

var ans = a + b
answerLabel.text = "Answer is \(ans)"
由于键盘类型为十进制,因此没有机会输入其他0-9或


希望这有帮助

您可以使用
NSNumberFormatter().numberFromString(yourNumberString)
。这很好,因为它返回了一个可选值,您可以使用
if let
测试该值,以确定转换是否成功。 例如

斯威夫特5
var myString=“\(10)”
如果让myNumber=NumberFormatter().number(from:myString){
var myInt=myNumber.intValue
//使用myInt执行您需要执行的操作
}否则{
//您需要编写什么错误代码
}

Swift 2.0+的更新答案

toInt()
方法给出了一个错误,因为它是从Swift 2.x中的
String
中删除的。相反,
Int
类型现在有一个接受
字符串的初始值设定项

let a: Int? = Int(firstTextField.text)
let b: Int? = Int(secondTextField.text)
这对我有用

var a:Int? = Int(userInput.text!)
关于int()和Swift 2.x:如果转换后得到一个nil值,请检查是否尝试转换一个带有大数字的字符串(例如:1073741824),在本例中,请尝试:

let bytesInternet : Int64 = Int64(bytesInternetString)!

编辑/更新:Xcode 11.4•Swift 5.2

请通过代码检查注释


IntegerField.swift文件内容:

import UIKit

class IntegerField: UITextField {

    // returns the textfield contents, removes non digit characters and converts the result to an integer value
    var value: Int { string.digits.integer ?? 0 }

    var maxValue: Int = 999_999_999
    private var lastValue: Int = 0

    override func willMove(toSuperview newSuperview: UIView?) {
        // adds a target to the textfield to monitor when the text changes
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        // sets the keyboard type to digits only
        keyboardType = .numberPad
        // set the text alignment to right
        textAlignment = .right
        // sends an editingChanged action to force the textfield to be updated
        sendActions(for: .editingChanged)
    }
    // deletes the last digit of the text field
    override func deleteBackward() {
        // note that the field text property default value is an empty string so force unwrap its value is safe
        // note also that collection remove at requires a non empty collection which is true as well in this case so no need to check if the collection is not empty.
        text!.remove(at: text!.index(before: text!.endIndex))
        // sends an editingChanged action to force the textfield to be updated
        sendActions(for: .editingChanged)
    }
    @objc func editingChanged() {
        guard value <= maxValue else {
            text = Formatter.decimal.string(for: lastValue)
            return
        }
        // This will format the textfield respecting the user device locale and settings
        text = Formatter.decimal.string(for: value)
        print("Value:", value)
        lastValue = value
    }
}
import UIKit
extension UITextField {
    var string: String { text ?? "" }
}
import Foundation
extension Formatter {
    static let decimal = NumberFormatter(numberStyle: .decimal)
}
import Foundation
extension NumberFormatter {
    convenience init(numberStyle: Style) {
        self.init()
        self.numberStyle = numberStyle
    }
}
extension StringProtocol where Self: RangeReplaceableCollection {
    var digits: Self { filter(\.isWholeNumber) }
    var integer: Int? { Int(self) }
}

扩展名格式化程序.swift文件内容:

import UIKit

class IntegerField: UITextField {

    // returns the textfield contents, removes non digit characters and converts the result to an integer value
    var value: Int { string.digits.integer ?? 0 }

    var maxValue: Int = 999_999_999
    private var lastValue: Int = 0

    override func willMove(toSuperview newSuperview: UIView?) {
        // adds a target to the textfield to monitor when the text changes
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        // sets the keyboard type to digits only
        keyboardType = .numberPad
        // set the text alignment to right
        textAlignment = .right
        // sends an editingChanged action to force the textfield to be updated
        sendActions(for: .editingChanged)
    }
    // deletes the last digit of the text field
    override func deleteBackward() {
        // note that the field text property default value is an empty string so force unwrap its value is safe
        // note also that collection remove at requires a non empty collection which is true as well in this case so no need to check if the collection is not empty.
        text!.remove(at: text!.index(before: text!.endIndex))
        // sends an editingChanged action to force the textfield to be updated
        sendActions(for: .editingChanged)
    }
    @objc func editingChanged() {
        guard value <= maxValue else {
            text = Formatter.decimal.string(for: lastValue)
            return
        }
        // This will format the textfield respecting the user device locale and settings
        text = Formatter.decimal.string(for: value)
        print("Value:", value)
        lastValue = value
    }
}
import UIKit
extension UITextField {
    var string: String { text ?? "" }
}
import Foundation
extension Formatter {
    static let decimal = NumberFormatter(numberStyle: .decimal)
}
import Foundation
extension NumberFormatter {
    convenience init(numberStyle: Style) {
        self.init()
        self.numberStyle = numberStyle
    }
}
extension StringProtocol where Self: RangeReplaceableCollection {
    var digits: Self { filter(\.isWholeNumber) }
    var integer: Int? { Int(self) }
}

扩展名NumberFormatter.swift文件内容:

import UIKit

class IntegerField: UITextField {

    // returns the textfield contents, removes non digit characters and converts the result to an integer value
    var value: Int { string.digits.integer ?? 0 }

    var maxValue: Int = 999_999_999
    private var lastValue: Int = 0

    override func willMove(toSuperview newSuperview: UIView?) {
        // adds a target to the textfield to monitor when the text changes
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        // sets the keyboard type to digits only
        keyboardType = .numberPad
        // set the text alignment to right
        textAlignment = .right
        // sends an editingChanged action to force the textfield to be updated
        sendActions(for: .editingChanged)
    }
    // deletes the last digit of the text field
    override func deleteBackward() {
        // note that the field text property default value is an empty string so force unwrap its value is safe
        // note also that collection remove at requires a non empty collection which is true as well in this case so no need to check if the collection is not empty.
        text!.remove(at: text!.index(before: text!.endIndex))
        // sends an editingChanged action to force the textfield to be updated
        sendActions(for: .editingChanged)
    }
    @objc func editingChanged() {
        guard value <= maxValue else {
            text = Formatter.decimal.string(for: lastValue)
            return
        }
        // This will format the textfield respecting the user device locale and settings
        text = Formatter.decimal.string(for: value)
        print("Value:", value)
        lastValue = value
    }
}
import UIKit
extension UITextField {
    var string: String { text ?? "" }
}
import Foundation
extension Formatter {
    static let decimal = NumberFormatter(numberStyle: .decimal)
}
import Foundation
extension NumberFormatter {
    convenience init(numberStyle: Style) {
        self.init()
        self.numberStyle = numberStyle
    }
}
extension StringProtocol where Self: RangeReplaceableCollection {
    var digits: Self { filter(\.isWholeNumber) }
    var integer: Int? { Int(self) }
}

扩展StringProtocol.swift文件内容:

import UIKit

class IntegerField: UITextField {

    // returns the textfield contents, removes non digit characters and converts the result to an integer value
    var value: Int { string.digits.integer ?? 0 }

    var maxValue: Int = 999_999_999
    private var lastValue: Int = 0

    override func willMove(toSuperview newSuperview: UIView?) {
        // adds a target to the textfield to monitor when the text changes
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        // sets the keyboard type to digits only
        keyboardType = .numberPad
        // set the text alignment to right
        textAlignment = .right
        // sends an editingChanged action to force the textfield to be updated
        sendActions(for: .editingChanged)
    }
    // deletes the last digit of the text field
    override func deleteBackward() {
        // note that the field text property default value is an empty string so force unwrap its value is safe
        // note also that collection remove at requires a non empty collection which is true as well in this case so no need to check if the collection is not empty.
        text!.remove(at: text!.index(before: text!.endIndex))
        // sends an editingChanged action to force the textfield to be updated
        sendActions(for: .editingChanged)
    }
    @objc func editingChanged() {
        guard value <= maxValue else {
            text = Formatter.decimal.string(for: lastValue)
            return
        }
        // This will format the textfield respecting the user device locale and settings
        text = Formatter.decimal.string(for: value)
        print("Value:", value)
        lastValue = value
    }
}
import UIKit
extension UITextField {
    var string: String { text ?? "" }
}
import Foundation
extension Formatter {
    static let decimal = NumberFormatter(numberStyle: .decimal)
}
import Foundation
extension NumberFormatter {
    convenience init(numberStyle: Style) {
        self.init()
        self.numberStyle = numberStyle
    }
}
extension StringProtocol where Self: RangeReplaceableCollection {
    var digits: Self { filter(\.isWholeNumber) }
    var integer: Int? { Int(self) }
}


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

希望这有帮助。

了解替代解决方案。您可以将扩展名用于本机类型。你可以在操场上测试

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

“2.添加(1)

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

//Xcode 8.1和swift 3.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
}
我们也可以通过可选绑定来处理它,只需

let occur = "10"

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

    }

我的解决方案是为字符串到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  
        }
    }

}

Swift 3.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
}
试试这个,你不需要检查任何条件,我已经做了一切,只需使用这个函数。发送任何字符串、数字、浮点、双精度等,。您将获得一个数字作为值,如果无法转换您的值,则为0

功能:

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 number:String = "9834"
print("printing number \(getNumber(number: number))")
let number:Double = 9834
print("printing number \(getNumber(number: number))")
let number = 9834
print("printing number \(getNumber(number: number))")
extension String {
    func convertStringToInt() -> Int {
        return Int(Double(self) ?? 0.0)
    }
}

let doubleStr = "4.2"
// print 4
print(doubleStr.convertStringToInt())

let intStr = "4"
// print 4
print(intStr.convertStringToInt())
用法: 在代码中添加上述函数并转换使用
让myNumber=getNumber(number:myString)
如果
myString
有一个数字或字符串,则返回该数字,否则返回
0

示例1:

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 number:String = "9834"
print("printing number \(getNumber(number: number))")
let number:Double = 9834
print("printing number \(getNumber(number: number))")
let number = 9834
print("printing number \(getNumber(number: number))")
extension String {
    func convertStringToInt() -> Int {
        return Int(Double(self) ?? 0.0)
    }
}

let doubleStr = "4.2"
// print 4
print(doubleStr.convertStringToInt())

let intStr = "4"
// print 4
print(intStr.convertStringToInt())
输出:
打印号码9834

示例2:

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 number:String = "9834"
print("printing number \(getNumber(number: number))")
let number:Double = 9834
print("printing number \(getNumber(number: number))")
let number = 9834
print("printing number \(getNumber(number: number))")
extension String {
    func convertStringToInt() -> Int {
        return Int(Double(self) ?? 0.0)
    }
}

let doubleStr = "4.2"
// print 4
print(doubleStr.convertStringToInt())

let intStr = "4"
// print 4
print(intStr.convertStringToInt())
输出:
打印号码9834

示例3:

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 number:String = "9834"
print("printing number \(getNumber(number: number))")
let number:Double = 9834
print("printing number \(getNumber(number: number))")
let number = 9834
print("printing number \(getNumber(number: number))")
extension String {
    func convertStringToInt() -> Int {
        return Int(Double(self) ?? 0.0)
    }
}

let doubleStr = "4.2"
// print 4
print(doubleStr.convertStringToInt())

let intStr = "4"
// print 4
print(intStr.convertStringToInt())

输出:
打印号码9834
最新swift3此代码仅用于将字符串转换为int

let myString = "556"
let myInt = Int(myString)
对于Swift3.x

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

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

从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

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
}
您还可以使用强制绑定以外的可选绑定

例如:

问题:字符串“4.0000”不能使用Int(“4.000”)转换为整数

回答:Int()检查字符串是否为整数,如果是,则为整数,否则为零。但Float或Double可以将任何数字字符串转换为相应的Float或Double,而不给出nil。例如,如果您有“45”整数字符串,但使用Float(“45”)得到45.0浮点值,或者使用Double(“4567”)得到45.0浮点值


解决方案:NSString(字符串:“45.000”)。integerValue或Int(Float(“45.000”)!要获得正确的结果。

因为字符串可能包含非数字字符,所以应该使用
保护
来保护操作。例如:

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

useLabelInt()

我最近也收到了同样的问题。以下解决方案适合我:

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

在Swift 4.2和Xcode 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)
在Swift 4中将字符串值转换为整数
Swift中的Int包含接受字符串的初始值设定项。它返回一个可选的Int?因为如果字符串不包含数字,转换可能会失败

通过使用if-let语句,可以验证转换是否成功

因此,您的代码如下所示:

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

用于字符串到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
        }
    }
像这样使用它:

"123".toInt() // 123

Swift 5.0及以上版本

工作

如果要拆分
字符串
,则会创建两个
子字符串
,而不是两个
字符串
。下面的方法将检查
Any
,并将其转换为
NSNumber
它很容易将
NSNumber
转换为
Int
Float
您需要的任何数据类型

实际代码

用法

传递
String
以检查并转换为
Double

Double(getNumber(number:  dict["OUT"] ?? 0)

Swift5浮点或整数字符串到整数:

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 number:String = "9834"
print("printing number \(getNumber(number: number))")
let number:Double = 9834
print("printing number \(getNumber(number: number))")
let number = 9834
print("printing number \(getNumber(number: number))")
extension String {
    func convertStringToInt() -> Int {
        return Int(Double(self) ?? 0.0)
    }
}

let doubleStr = "4.2"
// print 4
print(doubleStr.convertStringToInt())

let intStr = "4"
// print 4
print(intStr.convertStringToInt())

我还没试过,但也许你可以