从swift中的字符串中获取整数值

时间:2014-06-03 15:35:42

标签: swift swift2

所以我可以这样做:

var stringNumb: NSString = "1357"

var someNumb: CInt = stringNumb.intValue

但我找不到用String做的方法。我想做点什么:

var stringNumb: String = "1357"

var someNumb: Int = Int(stringNumb)

这也不起作用:

var someNumbAlt: Int = myString.integerValue

12 个答案:

答案 0 :(得分:168)

Swift 2.0 您可以使用构造函数

初始化Integer
var stringNumber = "1234"
var numberFromString = Int(stringNumber)

答案 1 :(得分:95)

我使用:

var stringNumber = "1234"
var numberFromString = stringNumber.toInt()
println(numberFromString)

注意toInt()

  

如果字符串表示适合Int的整数,则返回相应的整数。

答案 2 :(得分:17)

在Swift 3.0中

类型1:将NSString转换为字符串

    let stringNumb:NSString = "1357"
    let someNumb = Int(stringNumb as String) // 1357 as integer

类型2:如果字符串只有整数

    let stringNumb = "1357"
    let someNumb = Int(stringNumb) // 1357 as integer

类型3:如果字符串具有浮点值

    let stringNumb = "13.57"
    if let stringToFloat = Float(stringNumb){
        let someNumb = Int(stringToFloat)// 13 as Integer
    }else{
       //do something if the stringNumb not have digit only. (i.e.,) let stringNumb = "13er4"
    }

答案 3 :(得分:11)

您想要的方法是toInt() - 您必须要小心,因为toInt()会返回一个可选的Int。

let stringNumber = "1234"
let numberFromString = stringNumber.toInt()
// numberFromString is of type Int? with value 1234

let notANumber = "Uh oh"
let wontBeANumber = notANumber.toInt()
// wontBeANumber is of type Int? with value nil

答案 4 :(得分:5)

如果您只能使用NSString

它与objective-c非常相似。所有数据类型都在那里,但需要as NSString添加

    var x = "400.0" as NSString 

    x.floatValue //string to float
    x.doubleValue // to double
    x.boolValue // to bool
    x.integerValue // to integer
    x.intValue // to int

此外,我们还添加了toInt()功能。请参阅Apple Inc.“The Swift Programming Language。”iBooks。 https://itun.es/us/jEUH0.l第49页

x.toInt()

答案 5 :(得分:3)

上面的答案没有帮助我,因为我的字符串值是“700.00”

Swift 2.2 这对我有用

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

我将myInt传递给了NSFormatterClass

let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0

let priceValue = formatter.stringFromNumber(myInt!)!

//Now priceValue is ₹ 700

感谢this博文。

答案 6 :(得分:2)

您可以从String桥接到NSString并从CInt转换为Int,如下所示:

var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)

答案 7 :(得分:1)

我为此目的写了一个扩展名。它总是返回Int。如果字符串不适合Int,则返回0。

extension String {
    func toTypeSafeInt() -> Int {
        if let safeInt = self.toInt() {
            return safeInt
        } else {
            return 0
        }
    }
}

答案 8 :(得分:0)

更通用的解决方案可能是扩展

extension String {
    var toFloat:Float {
        return Float(self.bridgeToObjectiveC().floatValue)
    }
    var toDouble:Double {
        ....
    }
    ....
}

这例如通过toFloat扩展swift本机String对象

答案 9 :(得分:0)

在Swift 2.0中将String转换为Int:

var str:NSString = Data as! NSString
var cont:Int = str.integerValue

使用.intergerValue or intValue for Int32

答案 10 :(得分:0)

8:1赔率(*)

var stringNumb: String = "1357"
var someNumb = Int(stringNumb)

var stringNumb: String = "1357"
var someNumb:Int? = Int(stringNumb)

Int(String)会返回一个可选的Int?,而不是Int

安全使用:不要明确展开

let unwrapped:Int = Int(stringNumb) ?? 0

if let stringNumb:Int = stringNumb { ... }

(*)实际上没有解答为什么var someNumb: Int = Int(stringNumb)无效。

答案 11 :(得分:0)

简单但肮脏的方式

// Swift 1.2
if let intValue = "42".toInt() {
    let number1 = NSNumber(integer:intValue)
}
// Swift 2.0
let number2 = Int(stringNumber)

// Using NSNumber
let number3 = NSNumber(float:("42.42" as NSString).floatValue)

扩展方式

这更好,真的,因为它可以很好地处理区域设置和小数。

extension String {

    var numberValue:NSNumber? {
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .DecimalStyle
        return formatter.numberFromString(self)
    }
}

现在你可以做到:

let someFloat = "42.42".numberValue
let someInt = "42".numberValue