使用Swift将字符串转换为整数

398
该应用程序基本上通过输入初始速度、最终速度和时间来计算加速度,然后使用一个公式来计算加速度。然而,由于文本框中的值是字符串,我无法将它们转换为整数。
@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

7
尚未尝试,但也许你可以像这样转换数值:var answer1 = Int(txtBox1.text) - dibi
1
如果你的字符串是"23.0",那么如果你将它转换为Int("23.0"),它会返回nil。对于这种情况,你需要先将其转换为Double/Float,然后再次转换为Int。 - Ariven Nadar
31个回答

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

4

我制作了一个简单的程序,其中有两个文本字段,您可以从用户那里获取输入并将它们相加,为了更容易理解,请查看下面的代码。

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

希望这能有所帮助。

4

Swift 3.0

尝试使用以下函数,您无需检查任何条件,我已经做好了一切,请使用此函数。 发送任何字符串、数字、浮点数、双精度等,您将得到一个数字作为值,如果无法转换您的值,则返回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 myNumber = getNumber(number: myString) 如果myString包含数字或字符串,则返回该数字,否则返回0

示例 1:

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

输出:打印数字 9834

例子2:

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

输出:打印数字 9834

示例3:

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

输出: 打印数字 9834

3

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

let bytesInternet : Int64 = Int64(bytesInternetString)!

1
谢谢,这对我的情况起作用了。Int()在我使用16位数字时有效,但最近开始失效。 - Ryan Boyd

3

最新的Swift3,这段代码是用来将字符串转换为整数的。

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

2

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

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

useLabelInt()

2

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

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

2

将Swift5中的浮点数或整数字符串转换为整数:

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())

1
这对我有效。
var a:Int? = Int(userInput.text!)

这与评论中给出的解决方案有何不同? - Prune
2
评论中给出的解决方案末尾缺少 "!",这在 Swift 2 及以上版本中是必需的。 - Naishta

1
//  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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接