快速从字符串中获取整数值


134

所以我可以这样做:

var stringNumb: NSString = "1357"

var someNumb: CInt = stringNumb.intValue

但是我找不到办法String。我想做类似的事情:

var stringNumb: String = "1357"

var someNumb: Int = Int(stringNumb)

这也不起作用:

var someNumbAlt: Int = myString.integerValue

1
var someNumb: Int? = Int(stringNumb)var someNumb = Int(stringNumb)
SwiftArchitect

Answers:


179

Swift 2.0您可以使用构造函数初始化Integer

var stringNumber = "1234"
var numberFromString = Int(stringNumber)

14
从Swift 2.0开始,您不再将toInt()方法作为的一部分String。因此,此Int构造函数是将字符串转换为int的唯一方法。
Morgan Wilde

1
不需要分号
Sebastian

您能告诉用户在文本字段中输入的数字是否超过Int64限制数字
吗?

1
@Sebastian不会感到沮丧吗?:)
维克多

94

我会用:

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

注意事项toInt()

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


5
var someNumb: Int = stringNumber.toInt()!是可行的,尽管如果您显式声明var,则需要添加一个感叹号:正如@NateCook所指出
Logan

我没有明确声明它。编译器知道numberFromString应该是一个int,因为它已初始化为一个...
CW0007007 2014年

我知道你不是,但我是。为此,我必须进行调整。您的代码是正确的,只需将其添加为注释即可。
Logan 2014年

是的,仅当注释指出该值适合Int时,它才返回一个值。否则返回nil ...
CW0007007 2014年

5
!您可以将变量声明为可选:,而不用进行调用someNumb: Int? = stringNumber.toInt()。然后,类型安全系统将意识到foo可能不存在。!如果您的字符串不能转换为数字,则推杆当然会崩溃。
gwcoffey 2014年

18

在Swift 3.0中

类型1:将NSString转换为String

    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”的代码不理想。而不是检查stringToFloatis != nil,您应该使用if let
rmaddy

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

但类似的toInt()做法是正确的做法。可选内容是语言的核心部分
Jiaaro

当然,您只需要知道您使用的是可选的而不是纯Int。
Nate Cook 2014年

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

忘记添加as NSString。修复了它@gwcoffey
John Riselvato 2014年

2
我不想使用NSString,请参阅问题。
Logan

4

上面的答案没有帮助我,因为我的字符串值为“ 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 is700

感谢这篇博客文章。


1
这个问题是关于从字符串获取整数。在您的情况下,您没有Int,您有Double。在Swift中,只需使用Double()与使用相同的方法即可Int()。无需使用桥接到NSString。
埃里克·阿雅

嘿@EricD感谢您的建议,但“ 我仅 在将Int传递给NSNumberFormatter类的货币转换器时才需要Integer ”。
swiftBoy

1
好吧,在这种情况下,您可以先使用Double() 使用Int()。像这样:if let d = Double("700.00") { let i = Int(d); print (i) }:)
埃里克·艾雅

2

您可以像这样从String桥接到NSString并从CInt转换为Int:

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

1

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

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

2
这可以更简洁地写为return self.toInt() ?? 0。最好以内联方式编写而不是为此使用扩展方法。
jlong​​64

0

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

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

例如,这通过toFloat扩展了快速的本机String对象。


0

在Swift 2.0中将String转换为Int:

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

.intergerValue or intValue for Int32


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)不起作用的问题。


谢谢@ user3441734。我不应该用铸件
SwiftArchitect

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.